在PHP中使用带有Scope Resolution Operator的变量

时间:2015-08-18 05:15:02

标签: php oop yii2 static-methods scope-resolution

我遇到的情况是,我必须使用静态方法,但这里我的类名存储在某个变量中。

根据此链接:http://php.net/manual/en/keyword.paamayim-nekudotayim.php#50310我无法将变量用于::

供参考我的代码如下所示,我正在使用Yii2来处理这些事情:

$modelName = "User";

$query = $modelName::find();

显然它给了我错误,我给出的链接已经是10年了,所以只是想检查是否有任何替代这种情况。

更新

$query = AdminUser::find(); // Works Fine

$name = 'AdminUser';
$query = call_user_func("$name::find");
// Giving Below Error
call_user_func() expects parameter 1 to be a valid callback, class 'AdminUser' not found

1 个答案:

答案 0 :(得分:1)

您需要指定包含名称空间的类名。有关它,请参阅php docs。所以你的电话应该是这样的:

$name = __NAMESPACE__ . '\AdminUser';
$query = call_user_func("$name::find");

请注意__NAMESPACE__常量返回当前命名空间。因此,如果您的AdminUser类属于不同的名称空间,则需要指定它。 E.g:

//your current namespace:
namespace app\controllers;
//and somewhere in your method:
$name = 'common\models\AdminUser';
$query = call_user_func("$name::find");