php - 在 PHP 中使用带有作用域解析运算符的变量

标签 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

最佳答案

您需要指定包含命名空间的类名。见 php docs关于它。所以你的电话应该是这样的:

$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");

关于php - 在 PHP 中使用带有作用域解析运算符的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32064030/

相关文章:

python - “property”对象不能被解释为整数

C 可以使用对象 API 吗?

php - Yii2 子目录的解决方法?

javascript - Jquery val() 无法读取 php echo 接收到的 html 标签

php - 如何使用 jquery 添加新元素并在 php 中发布其值?

JAVA KeyEvent序列化错误

yii2 - 来自另一个表 yii2 的复选框并保留选中的值

php - 如何查看当前 session 中的所有 session 变量

php - 使用 CakePHP 管理大型应用程序

php - MySQL 中的动态导航菜单,PDO 显示一个实例