【发布时间】:2012-10-08 12:07:19
【问题描述】:
传递给 nms\aclass::__construct() 的参数 1 必须是一个实例 nms\stdClass 的实例,给定的 stdClass 实例
__construct() 函数看起来像 public function __construct(stdClass $aclass)
我得到了错误,我从全局命名空间中传递了一个 stdClass 的实例,而不是来自同一个命名空间中的一个实例,
我也得到了解决方案:public function __construct(\stdClass $aclass)
但我不明白的是为什么?我认为甚至不可能覆盖 stdClass 是吗?那么\stdClass 和\nms\stdClass 之间有什么区别?
【问题讨论】:
-
当您已经声明了一个命名空间时,我相信与该文件/类一起使用的任何内容都假定在该声明的命名空间内。因此,要在全局中使用某些内容,您需要使用
\显式引用它。 -
除非你的班级正在做一些非常通用的事情,否则我会质疑输入
stdClass的价值。您肯定对您期望的对象类型有足够的了解,可以给它一个更有用的类型提示吗? -
基本上它在代码点火器内部,该类期望的是数据库查询的结果,CI返回为
stdClass,基本上,这里的类型提示是因为如果它不是一个对象传入然后有人搞砸并通过了一个空的结果集或一个失败或类似的查询,它比其他任何东西都更基本的错误检查。不管这比关于类型提示 stdClass 的value更普遍的问题!
标签: php namespaces stdclass