Intereting Posts
PHP Curl (с NSS), вероятно, использует SSLv3 insted TLS при подключении к https WordPress / Woocommerce: как получить определенную дочернюю категорию по «id» из идентификатора родительской категории PHP array_walk_recursive () для объектов SimpleXML? Symfony2 MVC: где мой код? Кнопка Yii2 с параметром PHP скрипт загрузки создает нечитаемый ZIP-файл на Mac PHP regex заменяет пустое пространство на & nbsp; если он соответствует одной букве Могу ли я вручную указать на профилировщике xdebug, чтобы начать профилирование в определенном месте? дополнительные пробелы и новая строка PHP автоматически удаляются TEXTAREA Как установить значение по умолчанию для поля формы в Symfony2? Мне нужна помощь при отправке результатов jQuizzy через электронную почту `static` ключевое слово внутри функции? создать рекурсивное меню навигации php Как называть супер в PHP? как я могу совместить строковые значения двух массивов попарно с PHP?

Добавить метод в std-объект в php

Можно ли добавить метод / функцию таким образом, например

$arr = array( "nid"=> 20, "title" => "Something", "value" => "Something else", "my_method" => function($arg){....} ); 

или, может быть, так

 $node = (object) $arr; $node->my_method=function($arg){...}; 

и если это возможно, то как я могу использовать эту функцию / метод?

Вы не можете динамически добавлять метод в stdClass и выполнять его обычным способом. Однако есть несколько вещей, которые вы можете сделать.

В первом примере вы создаете закрытие . Вы можете выполнить это закрытие, выполнив команду:

 $arr['my_method']('Argument') 

Вы можете создать объект stdClass и назначить закрытие одного из его свойств, но из-за конфликта синтаксиса вы не можете его выполнить напрямую. Вместо этого вам нужно будет сделать что-то вроде:

 $node = new stdClass(); $node->method = function($arg) { ... } $func = $node->method; $func('Argument'); 

Попытка

 $node->method('Argument') 

будет генерировать ошибку, потому что никакой метод «метод» не существует на stdClass.

См. Этот ответ SO для некоторого пятна хакера, используя магический метод __call .

Это можно сделать в PHP 7.1 с анонимными классами

 $node = new class { public $property; public function myMethod($arg) { ... } }; // and access them, $node->property; $node->myMethod('arg');