anton_reut
@anton_reut
Начинающий веб-разработчик

Для чего объявлять (создавать) имена полей в начале класса если они же по сути объявляются (создаются) в конструкторе?

Например вот такой код:
<?php
class Testclass{
	
	private $a;
	private $b;
	
	public function __construct($a, $b){
		$this->a = $a;
		$this->b = $b;
	}
}


В конструкторе мы задаем значения переменных $a и $b, но даже если я уберу первые две строки private $a; private $b; в начале класса то эти поля автоматически создадутся из конструктора и внутренний метод нормально сработает:
class Testclass{
	
	//Закомментировал private $a;
	//Закомментировал private $b;
	
	public function __construct($a, $b){
		$this->a = $a;
		$this->b = $b;
	}
	public function Sum(){
		echo $this->a + $this->b;
	}
}
	
$object = new Testclass(5, 6);
$object->Sum();
  • Вопрос задан
  • 489 просмотров
Решения вопроса 3
@rfm
чтобы в редакторе кода, когда вы набираете
$object->|
он мог вам подсказать какие свойства есть у объекта.

чтобы явно указать видимость свойств (например, протектед)
чтобы потом не искать какие свойства есть у объекта через год, шарясь по всем его методам.
чтобы у вас не отвалилось все к чертям, если вы перепишите конструктор в классе-потомке.
Ответ написан
@FanatPHP
Чебуратор тега PHP
Зачем мыть руки перед едой, ведь и из грязных ложка не выпадет?

Пхп - язык с плохой наследственностью. И эта "возможность" - один из рудиментов оставшихся с тех времён, когда язык писался в памперсы.

Но на самом деле все переменные надо объявлять перед использованием
Ответ написан
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
Это работает, сделано это для магических приколов, чтоб не было приколов лучше объявить все, если свойства нужны только в конструкторе, то их можно не создавать, а обработать конструктор и сохранить результат в свойство например
Ну и свойства такие будут публичными
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы