在 PHP 中将变量与范围解析运算符一起使用
Using variable with Scope Resolution Operator in PHP
我遇到的情况是,我必须使用静态方法,但这里我的 class 名称存储在某个变量中。
根据这个 link:http://php.net/manual/en/keyword.paamayim-nekudotayim.php#50310 我不能将变量与 ::
一起使用。
作为参考,我的代码如下所示,我使用 Yii2 来处理这些内容:
$modelName = "User";
$query = $modelName::find();
显然它给了我错误,Link 我给出的是从现在起 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
您需要指定 class 名称,包括命名空间。请参阅 php docs。所以你的电话应该是这样的:
$name = __NAMESPACE__ . '\AdminUser';
$query = call_user_func("$name::find");
请注意 __NAMESPACE__
常量 returns 当前命名空间。因此,如果您的 AdminUser
class 属于不同的命名空间,您需要指定它。例如:
//your current namespace:
namespace app\controllers;
//and somewhere in your method:
$name = 'common\models\AdminUser';
$query = call_user_func("$name::find");
我遇到的情况是,我必须使用静态方法,但这里我的 class 名称存储在某个变量中。
根据这个 link:http://php.net/manual/en/keyword.paamayim-nekudotayim.php#50310 我不能将变量与 ::
一起使用。
作为参考,我的代码如下所示,我使用 Yii2 来处理这些内容:
$modelName = "User";
$query = $modelName::find();
显然它给了我错误,Link 我给出的是从现在起 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
您需要指定 class 名称,包括命名空间。请参阅 php docs。所以你的电话应该是这样的:
$name = __NAMESPACE__ . '\AdminUser';
$query = call_user_func("$name::find");
请注意 __NAMESPACE__
常量 returns 当前命名空间。因此,如果您的 AdminUser
class 属于不同的命名空间,您需要指定它。例如:
//your current namespace:
namespace app\controllers;
//and somewhere in your method:
$name = 'common\models\AdminUser';
$query = call_user_func("$name::find");