在在PHP一个std对象添加方法(Add method in an std object in ph

2019-06-26 07:27发布

是否有可能以这种方式添加的方法/功能,如

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

也许这样的

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

并且如果可能的话那么我该如何使用该函数/方法?

Answer 1:

你不能一个方法动态添加到stdClass的,并以正常的方式执行。 然而,也有一些事情可以做。

在你的第一个例子,你要创建一个封闭 。 您可以通过发出命令执行该关闭:

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

您可以创建一个stdClass的对象和闭合分配给它的属性之一,但由于语法冲突,你不能直接执行它。 相反,你将不得不做这样的事情:

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

尝试

$node->method('Argument')

会产生一个错误,因为没有方法“方法”上stdClass的存在。

看到这个苏答案使用魔术方法的一些华而不实的两轮牛车__call 。



Answer 2:

这是现在可以在PHP 7.1匿名类来实现

$node = new class {
    public $property;

    public function myMethod($arg) { 
        ...
    }
};

// and access them,
$node->property;
$node->myMethod('arg');


文章来源: Add method in an std object in php