У меня есть некоторые путаницы! Я простой класс, как указано нижеPhp - динамически добавленный метод не вызывается
class MyClass {
public $bar;
}
Тогда я сделал экземпляр
$cls = new MyClass;
Тогда я присвоено значение моей общественной собственности $bar
снаружи класса
$cls->bar='Bar';
Затем я добавил новое публичное имущество $baz
и присвоенное ему значение извне класса
$cls->baz='Baz';
Затем я добавил новую общественную собственность $showBar
и присваивается значение к нему извне класса и на этот раз значения является анонимной функцией
$cls->showBar = function(){
return $this->bar;
};
Тогда я свалил $cls
используя var_dump($cls);
экземпляр и выход
object(MyClass)[10]
public 'bar' => string 'Bar' (length=3)
public 'baz' => string 'Baz' (length=3)
public 'showBar' =>
object(Closure)[11]
Кажется, что все публичные свойства доступны, которые я добавил в том числе функции anonymous
, а затем я сделал
echo $cls->bar; // Bar
echo $cls->baz; // Baz
echo $cls->showBar(); // error
Публичная собственность showbar
доступна в класса (var_dump показывает его), но когда я вызываю функцию он говорит
Fatal error: Call to undefined method MyClass::showBar() in D:\xampp\htdocs\phpTutorialInfo\bind\bindtoCls.php on line 234
Возникает вопрос: Можно добавлять новые свойства после инициализация (отлично работает со скалярным значением), а также showbar
кажется доступным тогда почему не может Php
признать это, и если это потому, что это значение является анонимной функцией, то почему оно доступно на выходе var_dump
, включая функцию эльф и почему Php
позвольте мне назначить значение (анонимная функция), оно должно было вызвать ошибку, когда я пытался присвоить значение showbar
? Возможно ли это вообще?
Я думаю, что путь вы вызываете функцию Showbar(), он не может думать о $ это как являющийся объектом $ cls. Получили ли вы фактическое сообщение об ошибке? Проводка может помочь осветить вещи. – murftown
Возможный дубликат [Лямбда-функции в PHP не являются логическими] (http://stackoverflow.com/questions/2080248/lambda-functions-in-php-arent-logical) – outis