【问题标题】:How do I pass a Class as a parameter to a PHP function如何将类作为参数传递给 PHP 函数
【发布时间】: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 中失败,但在真实代码中工作。我不确定会有什么区别,但你是绝对正确的——它工作得很好。谢谢。

标签: php laravel class static


【解决方案1】:

您可以像这样将类本身作为参数传递,将变量作为实例传递

function do_thing_with_any_class(MyClass $class)
{
  return $class::doThing();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 2020-12-18
    • 2019-07-23
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多