【问题标题】:need to convert string namespace to stdclass需要将字符串命名空间转换为 stdclass
【发布时间】:2019-02-09 17:47:30
【问题描述】:

我正在使用这个命名空间

use \App\Model\PostsModel;

我正在尝试在另一个类中访问这样的类:

public $model = PostsModel::class;

vardump 的输出是“App\Model\PostsModel”,vardump 表明它的类型是字符串。

我已经搜索了很多,但我找不到如何将字符串转换/转换为 stdclass。这是我尝试过的:

$model = \App\Model\PostsModel;

我也尝试获取它的一个实例

public $model = new \App\Model\PostsModel;  
public $model = new PostsModel::class; 

我的 vardump 是:

vardump($this->model);

这表明我的命名空间地址是正确的

【问题讨论】:

  • 从你的命名空间use App\Model\PostsModel ;移除slaces(/)
  • 我仍然遇到同样的错误 --> 致命错误:未捕获的错误:调用字符串上的成员函数 getSelect()
  • 请提供最少的复制 - 编码您正在使用的代码,您遇到的错误。

标签: php stdclass


【解决方案1】:

问题是您试图在没有实例化之前访问该类。

ClassName::class 中的值始终是字符串,而不是该类的实例。

您可以将类名(字符串)分配给 var,然后仅使用该变量创建该类的新实例。请参阅下一个示例。

<?php

use \App\Model\PostsModel;

class OtherClass {
    public $model;

    public function callOther() {
        $this->model = PostsModel::class;

        $instance = new $this->model();
        $instance->callSomeMethod();
    }
}

【讨论】:

  • 谢谢你,我的问题用你说的方法解决了,但我试过 $this->model = new PostsModel::class ;为什么这种方式行不通?这不是一回事吗?
  • @ImanEmadi 正如我所说的,问题是ClassName::class 或者在这种情况下PostsModel 将类的名称空间和名称作为字符串返回。创建新类实例的最佳方法是不使用类直接调用。 $this-&gt;model = new PostsModel();php.net/manual/en/language.oop5.constants.php中的示例3
猜你喜欢
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
相关资源
最近更新 更多