PHP7内核中Object如何实现深度解析与高效管理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1670个文字,预计阅读时间需要7分钟。
PHP5+ 按照惯例,我先带大家回顾一下PHP5时的zend_object(这部分内容之前的文章中也有涉及,如果熟悉可以直接跳过),如果感兴趣也可以看看10年前关于深入理解PHP原理的对象篇。PHP5中,对象的概念是如何实现的呢?
PHP5
按照惯例,我先带大家回顾下PHP5时的zend_object(此部分内容之前的文章中也有涉及,如果熟悉可以跳过), 之前如果有兴趣也可以看看我10年前写的深入理解PHP原理之对象.
PHP5中,对象的定义如下:
typedef struct _zend_object { zend_class_entry *ce; HashTable *properties; zval **properties_table; HashTable *guards; } zend_object;
其中ce存储了这个对象所属的类, 关于properties_table和properties, properties_table是申明的属性,properties是动态属性,也就是比如:
<?php class Foo { public $a = 'defaul property'; } $a = New Foo(); $a->b = 'dynamic property';
因为在Foo的定义中,我们申明了public $a, 那么$a就是已知的申明属性,它的可见性,包括在properties_table中存储的位置都是在申明后就确定的。
本文共计1670个文字,预计阅读时间需要7分钟。
PHP5+ 按照惯例,我先带大家回顾一下PHP5时的zend_object(这部分内容之前的文章中也有涉及,如果熟悉可以直接跳过),如果感兴趣也可以看看10年前关于深入理解PHP原理的对象篇。PHP5中,对象的概念是如何实现的呢?
PHP5
按照惯例,我先带大家回顾下PHP5时的zend_object(此部分内容之前的文章中也有涉及,如果熟悉可以跳过), 之前如果有兴趣也可以看看我10年前写的深入理解PHP原理之对象.
PHP5中,对象的定义如下:
typedef struct _zend_object { zend_class_entry *ce; HashTable *properties; zval **properties_table; HashTable *guards; } zend_object;
其中ce存储了这个对象所属的类, 关于properties_table和properties, properties_table是申明的属性,properties是动态属性,也就是比如:
<?php class Foo { public $a = 'defaul property'; } $a = New Foo(); $a->b = 'dynamic property';
因为在Foo的定义中,我们申明了public $a, 那么$a就是已知的申明属性,它的可见性,包括在properties_table中存储的位置都是在申明后就确定的。

