Можно ли добавить метод / функцию таким образом, например
$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');