当前位置:  编程技术>php

从PHP的源码中深入了解stdClass类

    来源: 互联网  发布时间:2014-08-26

    本文导语:  在百度百科中,对于stdClass的定义如下: 代码如下:stdClass在PHP5才开始被流行。而stdClass也是zend的一个保留类。stdClass是PHP的一个基类,所有的类几乎都继承这个类,所以任何时候都可以被new,可以让这个变量成为一个object。同...

在百度百科中,对于stdClass的定义如下:

代码如下:

stdClass在PHP5才开始被流行。而stdClass也是zend的一个保留类。stdClass是PHP的一个基类,
所有的类几乎都继承这个类,所以任何时候都可以被new,可以让这个变量成为一个object。同时,
这个基类又有一个特殊的地方,就是没有方法。凡是用new stdClass()的变量,
都不可能会出现$a->test()这种方式的使用。PHP5的对象的独特性,对象在任何地方被调用,
都是引用地址型的,所以相对消耗的资源会少一点。在其它页面为它赋值时是直接修改,而不是引用一个拷贝。

以上的定义大多数都是正确的,但是一个致命性的诊断错误: stdClass是PHP的一个基类,所有的类几乎都继承这个类。 看一个简单的例子:

代码如下:

class EmptyClass {

}

$object = new EmptyClass();
if ($object instanceof stdClass) {
    echo 'yes';
}else{
    echo 'no';
}

执行代码,输出”no”,这个例子充分说明了stdClass类并不是所有类的基类。它仅仅是PHP的一个保留类,或者说一个类似于strlen函数这样的一个角色。 我们从源码的维度看看stdClass类的实现,它注册的位置在 Zend/zend_buildin_functions.c文件中。如下:

代码如下:

ZEND_MINIT_FUNCTION(core) { /* {{{ */
    zend_class_entry class_entry;

    /* 注册stdClass 类 */
    INIT_CLASS_ENTRY(class_entry, "stdClass", NULL);
    zend_standard_class_def = zend_register_internal_class(&class_entry TSRMLS_CC);

    /* 注册默认类,接口,如Exception类,SPL中的一些类等 */
    zend_register_default_classes(TSRMLS_C);   

    return SUCCESS;
}
/* }}} */

这是zend_builtin_module的模块初始化函数,在PHP内核进行模块初始化操作时会自动加载这个函数, 这样,stdClass类的注册操作也就会被执行了。从这段代码可以看出,stdClass类是一个没有成员变量也没有成员方法的类。 它的所有的魔术方法,父类、接口等在初始化时都被设置成NULL。由于在PHP中对于一个类我们无法动态的添加方法, 所以这个类只能用来处理动态属性,这也是我们一种常见的用法。

总结一下:

stdClass类是PHP的一个内部保留类,初始时没有成员变量也没成员方法,所有的魔术方法都被设置为NULL,可以使用其传递变量参数,但是没有可以调用的方法。stdClass类可以被继承,只是这样做没有什么意义。


    
 
 

您可能感兴趣的文章:

  • PHP源码自动生成插件 PHP Source Plugin
  • PHP源码加密工具 SourceCop
  • linux下php编译显示源码
  • PHP源码文档工具 PHPXref
  • PHP 源码 make 出错
  • PHP 源码加密模块 php-beast
  • PHP网页游戏学习之Xnova(ogame)源码解读(一)
  • Linux+php+apache+oracle环境搭建之CentOS下源码编译安装PHP
  • PHP网页游戏学习之Xnova(ogame)源码解读(八)
  • PHP网页游戏学习之Xnova(ogame)源码解读(十二)
  • Centos源码安装PHP,页面显示空白
  • centos源码编译php5 mcrypt模块步骤详解
  • PHP网页游戏学习之Xnova(ogame)源码解读(十四)
  • PHP网页游戏学习之Xnova(ogame)源码解读(十一)
  • PHP网页游戏学习之Xnova(ogame)源码解读(九)
  • PHP网页游戏学习之Xnova(ogame)源码解读(十)
  • PHP网页游戏学习之Xnova(ogame)源码解读(十三)
  • PHP网页游戏学习之Xnova(ogame)源码解读(四)
  • PHP网页游戏学习之Xnova(ogame)源码解读(六)
  • 将酷狗krc歌词解析并转换为lrc歌词php源码
  • 理解PHP中的stdClass类
  • PHP错误Cannot use object of type stdClass as array in错误的解决办法
  • PHP JSON出错:Cannot use object of type stdClass as array解决方法
  • PHP中把stdClass Object转array的几个方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 深入理解PHP内核 TIPI
  • PHP中redis的用法深入解析
  • 深入理解PHP中的global
  • 深入解读php中关于抽象(abstract)类和抽象方法的问题分析
  • PHP传参原理深入解析
  • PHP面向对象之旅:深入理解static变量与方法
  • PHP之Mysql常用SQL语句示例的深入分析
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)
  • PHP 5.4.19 和 PHP 5.5.3 发布及下载地址
  • php输入流php://input使用示例(php发送图片流到服务器)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • PHP转换器 HipHop for PHP
  • PHP去除html标签,php标记及css样式代码参考
  • PHP 框架 Pop php
  • PHP 'ext/soap/php_xml.c'不完整修复存在多个任意文件泄露漏洞
  • PHP的JavaScript框架 PHP.JS
  • php通过socket_bind()设置IP地址代码示例
  • php服务器探针显示php服务器信息
  • php安装完成后如何添加mysql扩展
  • PHP缓存加速器 Alternative PHP Cache (APC)
  • PHP的substr() 函数用法
  • PHP源文件加密工具 PHP Screw
  • PHP介绍及学习网站推荐
  • PHP自动化测试 PHP-QAT
  • php中操作memcache的类及成员列表及php下如何连接memched服务器
  • PHP 的 HTTP 客户端库 PHP Buzz
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • PHP 调试工具 PHP_Dyn


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3