Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么stdClass有名称空间?_Php_Namespaces_Stdclass - Fatal编程技术网

Php 为什么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

传递给nms\aclass::\uu construct()的参数1必须是实例 对于nms\stdClass,给出了stdClass的实例

\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。。。错误!但是不,想想看,这就是名称空间的目的@海尔伍德:的确如此。甚至本机函数也可以从名称空间内部重新声明。