如何在不扩展php的类的情况下添加/覆盖方法?
举个例子:
<?php
DateTime.aMethod = function($inp)
{ //....
};
$datetime = new DateTime();
$datetime.aMethod('value');
DateTime.aStaticMethod = static function($inp)
{ //....
};
DateTime::aStaticMethod('value');
答案 0 :(得分:0)
我想说你不能在运行时用PHP动态地向类中添加方法。
但你可以试试runkit扩展并试试这个实验函数: runkit_method_add
此功能是实验性的。它的功能是这个功能的行为 名称和周围文档可能会更改,恕不另行通知 PHP的未来版本。使用此功能需要您自担风险。
示例:
<?php
runkit_method_add(
'DateTime',
'aMethod',
'$inp',
'return $inp;',
RUNKIT_ACC_PUBLIC
);
$datetime = new DateTime();
$datetime->aMethod('value');
runkit_method_add(
'DateTime',
'aStaticMethod',
'$inp',
'return $inp;',
RUNKIT_ACC_STATIC
);
DateTime::aStaticMethod('value');
答案 1 :(得分:0)
因为,看看它......
这个问题的非可怕答案是uopz
不可怕的代码是:
<?php
uopz_function(DateTime::class, "aMethod", function($arg){
return $arg;
});
uopz_function(DateTime::class, "aStaticMethod", function($arg){
return $arg;
}, ZEND_ACC_STATIC);
?>