是否有可能以这种方式添加的方法/功能,如
$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的存在。
看到这个苏答案使用魔术方法的一些华而不实的两轮牛车__call 。
这是现在可以在PHP 7.1匿名类来实现
$node = new class {
public $property;
public function myMethod($arg) {
...
}
};
// and access them,
$node->property;
$node->myMethod('arg');