4

我有一种情况,我必须使用静态方法,但我的类名存储在某个变量中。

根据此链接: 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
4

1 回答 1

2

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

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

请注意,__NAMESPACE__常量返回当前命名空间。所以如果你的AdminUser类属于不同的命名空间,你需要指定它。例如:

//your current namespace:
namespace app\controllers;
//and somewhere in your method:
$name = 'common\models\AdminUser';
$query = call_user_func("$name::find");
于 2015-08-18T06:48:40.860 回答