zoukankan      html  css  js  c++  java
  • PHP stdClass类 使用

    总结一下:

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

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

    执行代码,输出”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;

    }

    /* }}} */

    或者,我们可以又这么理解一下,正因为PHP5的对象的独特性,对象在任何地方被调用,都是引用地址型的,所以相对消耗的资源会少一点。在其它页面为它赋值时是直接修改,而不是引用一个拷贝。

     

    例如:

     

    $user = new stdClass();

    $user->name = ‘gouki’;

    $myUser = $user;

    $myUser->name = ‘flypig’;

    如果在PHP4时代,这样的代码就是在消耗系统资源。因为:

    $myUser = $user;

    这是创建了一个拷贝。所以,在PHP4的时候,都是这样使用:

    $myUser = & $user;

    前望
  • 相关阅读:
    asp.net HttpModule和HttpHandler
    Asp.Net生命周期和Http管道技术
    降低web服务器压力
    html里嵌入CSS的三种方式
    php实现简单视图模板(视图引擎)
    ASP.NET MVC路由配置
    igel udc2 config
    单IP、网络、别名管道限速的设置
    Apple SIP简介及在Clover中如何控制
    Hackintosh
  • 原文地址:https://www.cnblogs.com/ybbqg/p/2375488.html
Copyright © 2011-2022 走看看