#php #oop #getter-setter #magic-methods
#php #ооп #получатель-установщик #magic-методы
Вопрос:
Я пытаюсь понять магические функции в классе, и пока я тестировал методы __set() и __get() . код:
class kids{
private $height;
public function __set($property, $value){
//if(property_exists($this, $property))
$this->property= $value; //this works
}
public function __get($property){
return "The child's height is " . $this->$property . " inches tall";
}
}
$kid1= new kids;
$kid1->height= 45;
echo $kid1->height;
ВЫВОД :
The child's height is 45 inches tall
МОЯ ПРОБЛЕМА:
вывод правильный, но если я раскомментирую if(property_exists($this, $property))
, то __set вызывается дважды, и это не изменяет значение height, если я не напишу его так $this->$property= $value;
, добавив $ to $this->property
.
ВЫВОД с помощью property_exists() :
The child's height is inches tall
Я попытался поискать проблему в Google, но обнаружил, что функция property_exists() не может обнаружить свойства, которые волшебным образом доступны с помощью метода __get magic . Я не понимаю эту заметку.
Если кто-то может пролить свет на это, я был бы очень признателен.
Комментарии:
1. С
$this->property= $value;
помощью я получаю выводThe child's height is inches tall
,$this->property
который ссылается на свойство с именемproperty
.$this->$property= $value;
работает в приведенном выше коде.2. Вывод вашего исходного фрагмента (с
property_exists
проверкой) также не показывает «45». по причине, на которую указал Найджел (и вы сами). Так что, я думаю, вы кое-что перепутали.