Php 为什么stdClass有名称空间?
传递给nms\aclass::\uu construct()的参数1必须是实例 对于nms\stdClass,给出了stdClass的实例Php 为什么stdClass有名称空间?,php,namespaces,stdclass,Php,Namespaces,Stdclass,传递给nms\aclass::\uu construct()的参数1必须是实例 对于nms\stdClass,给出了stdClass的实例 \uu构造()函数看起来像公共函数\uu构造(stdClass$aclass) 我得到一个错误,我从全局名称空间传入了stdClass的一个实例,而不是同一名称空间内的一个实例 我还得到了解决方案:public function\uu构造(\stdClass$aclass) 但我不明白的是为什么?我认为甚至不可能覆盖stdClass,是吗?那么\stdCla
\uu构造()
函数看起来像公共函数\uu构造(stdClass$aclass)
我得到一个错误,我从全局名称空间传入了stdClass的一个实例,而不是同一名称空间内的一个实例
我还得到了解决方案:public function\uu构造(\stdClass$aclass)
但我不明白的是为什么?我认为甚至不可能覆盖stdClass,是吗?那么
\stdClass
和\nms\stdClass
之间有什么区别呢?确保可以在命名空间内部重写stdClass
namespace Example;
class stdClass {
public function __construct() {
echo "Overridden!";
}
}
$global = new \stdClass();
$local = new stdClass;
产出:
Overridden!
因此,如果需要原始名称空间,则需要使用
/stdClass
全局名称空间。与/Exception
s.非常相似,当您已经声明了一个名称空间时,我相信与该文件/类一起使用的任何东西都假定在该声明的名称空间内。因此,要在全局中使用某些内容,您需要使用\
显式引用它。除非您的类正在做一些非常通用的事情,否则我会质疑类型提示stdClass
的值。当然,您对所期望的对象类型了解得足够多,可以为其提供更有用的typehint吗?基本上,它位于代码点火器内部,类所期望的是来自数据库查询的结果,基本上,CI以stdClass
的形式返回,这里的类型提示是因为,如果传入的不是对象,那么有人搞错了,通过了一个空的结果集或一个失败或类似的查询,这是最基本的错误检查。不过,这更像是一个一般性的问题,而不是关于类型提示stdClass的值的问题!啊,好吧,我想它会给你一个可爱的不能在中重新声明类stdClass。。。错误!但是不,想想看,这就是名称空间的目的@海尔伍德:的确如此。甚至本机函数也可以从名称空间内部重新声明。