【发布时间】:2015-07-03 20:44:38
【问题描述】:
在 Laravel (4 & 5) 中,我尝试使用动态类名,然后直接调用它们,但如果不首先将它们存储在本地字符串变量中,则会收到致命错误。
假设我有一个基础课:
class SimpleModel {
private $modelName;
function __construct($id) {
$this->modelName = AnotherModel::getName($id);
}
}
在方法之内,我可以轻松做到
$modelName = $this->modelName;
$modelName::find(1);
但在尝试以下操作时出现致命错误:
$this->modelName::find(1);
这会触发带有消息的Symfony\Component\Debug\Exception\FatalErrorException
syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)
基本上T_PAAMAYIM_NEKUDOTAYIM 是由:: 符号生成的语法错误。
我无法理解为什么 Laravel(或一般的 PHP)在使用局部变量(在方法内)但不允许使用类变量时允许动态类名。
我也尝试将它放在单独的方法getModelName() 方法中,但得到了同样的错误。
$this->getModelName()::find(1);
每次都实例化一个新类 (new $this->modelName) 不是一个好的解决方案。
我正在考虑使用 PHP 的 Reflection,但不知道如何在不每次都实例化新类的情况下做到这一点。
由于它在使用本地字符串时有效,因此 Reflection 似乎可能是过度杀戮。
【问题讨论】:
标签: php oop laravel laravel-4 laravel-5