Почему нету нотиса?

В конструкторе присваиваю новому проперти значение и все работает:
/**
     * Constructor function
     */
    protected function __construct()
    {
        parent::_construct();
        $this->_helper = 'blablabla';
    }


Но на снолько я понимаю, сначала надо декларировать его:
/** @var  object $_helper */
    protected $_helper;


UPD: дело не в мадженте. Вот пример на чистом пхп:
ini_set('display_errors', 1);
error_reporting(E_ALL);

/**
 * Class Foo
 */
class Foo
{
    /**
     * Constructor function
     */
    public function __construct()
    {
        $this->_bar = 'bar';
    }

    /**
     * Print bar
     */
    public function printBar()
    {
        echo $this->_bar;
    }
}

$foo = new Foo();
$foo->printBar();
  • Вопрос задан
  • 233 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Если ваш класс (либо его предки) не реализует __set, то возможно добавить любые новые свойства в рантайме - добавлены они будет как public.

Объявление свойства в описании класса на самом деле не требуется языком, но требуется другими разработчиками. И это не просто хороший тон, а именно "так и должно быть".
И как дополнительная плюшка, если все свойства объекта объявлены в описании класса, объекты этого класса будут использовать более эффективное распределение памяти. При попытке создать новое свойство - будет прозрачно смигрировано в более толстую структуру.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Может сеттер есть какой? Вообще весь бы код увидеть :)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы