在 php 中的 std 对象中添加方法

2022-08-30 17:32:45

是否可以以这种方式添加方法/函数,例如

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

或者像这样

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

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


答案 1

现在,在 PHP 7.1 中,使用匿名类可以实现这一点。

$node = new class {
    public $property;

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

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

答案 2

不能将方法动态添加到 stdClass 并以正常方式执行它。但是,您可以执行一些操作。

在第一个示例中,您将创建一个闭包。您可以通过发出以下命令来执行该闭包:

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

可以创建 stdClass 对象并将闭包分配给其属性之一,但由于语法冲突,无法直接执行它。相反,您必须执行以下操作:

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

尝试

$node->method('Argument')

将生成错误,因为 stdClass 上不存在方法“方法”。

请参阅此SO答案,了解一些使用魔术方法的光滑黑客__call


推荐