PHP7中如何深入掌握Object对象核心机制?

更新于
2026-09-25 17:38:57
0阅读来源:SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1678个文字,预计阅读时间需要7分钟。

PHP7中如何深入掌握Object对象核心机制?

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中存储的位置都是在申明后就确定的。

而$a->b, 是我们动态给添加的属性,它不属于已经申明的属性,这个会存储在properties中。

阅读全文

本文共计1678个文字,预计阅读时间需要7分钟。

PHP7中如何深入掌握Object对象核心机制?

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中存储的位置都是在申明后就确定的。

而$a->b, 是我们动态给添加的属性,它不属于已经申明的属性,这个会存储在properties中。

阅读全文