Приношу извинения моим коллегам за публикацию того, что выглядит как дубликат ответа, но они что-то упустили.
Для правильного функционирования хуков __get()
и __set()
рассматриваемая переменная-член вообще не может быть объявлена - просто она объявлена, но undefined недостаточен.
Это означает, что вам придется удалить объявление любых переменных, которые вы хотите сделать доступными, таким образом (т. Е. public $Ingredients;
и т. Д.)
Итак, ваш класс может выглядеть так.
class Bread
{
/* No variable declarations or the magic methods won't execute */
protected function loadIngredients()
{
$this->Ingredients = ...
}
public function __get( $var )
{
switch( $var )
{
case "Ingredients" : $this->loadIngredients(); break;
case "Price" : $this->loadPrice(); break;
case "Color" : $this->loadColor(); break;
default : throw new Exception( "No case for $var" );
}
return $this->$var;
}
}