【发布时间】:2020-07-22 14:29:43
【问题描述】:
我希望能够将一个类(不是类的对象)传递给 PHP 函数。所有这些的期望最终结果是能够调用该类中存在的静态函数。举个例子:
class MyClass extends Model
{
public static function doThing()
{
return static::callOtherClassFunction();
}
}
现在我有一个结构如下的函数:
function do_thing_with_any_class($class)
{
return $class::doThing();
}
但是,如果我调用 do_thing_with_any_class(MyClass::class),我会收到语法错误。
我想在 PHP 中用惯用方式做的事情是可能的吗? (即不使用反射来获取静态函数)。
P.S:这被标记为“Laravel”,因为“MyClass”代表我的“基础模型”——该类直接继承自 Laravel 的“模型”类。但这个问题肯定比这更笼统。
【问题讨论】:
-
您使用的是哪个 PHP 版本?因为传递
MyClass::class在 PHP >= 5.5.0 上可以正常工作:3v4l.org/CNLUs(选中“eol 版本”复选框以在旧版本的 PHP 中测试它)——仅在 5.4.45 和更早版本上它会引发语法错误. -
@rickdenhaan 我在 7.4,我倾向于使用 Laravel Tinker (PsySH) 来测试。无论出于何种原因,它似乎在 PsySH 中失败,但在真实代码中工作。我不确定会有什么区别,但你是绝对正确的——它工作得很好。谢谢。