File tree 3 files changed +10
-10
lines changed
3 files changed +10
-10
lines changed Original file line number Diff line number Diff line change 13
13
Javascript中的类(Function)也具有类定义的特性。这也印证了面向对象只是一种编程范式。
14
14
1 . 对象。对象是类的实例。对象是具体的。
15
15
1 . 方法。方法是类定义对象可以做的事情。
16
- 1 . 继承性。继承是类的具体化,子类是比具备更多特性和行为的类 。面向对象是对现实世界的一个抽象。
16
+ 1 . 继承性。继承是类的具体化,子类是比父类具备更多特性和行为的类 。面向对象是对现实世界的一个抽象。
17
17
在很多时候的关系并不一定是继承关系。能在一定程序上实现代码的重用。
18
18
1 . 封装性、抽象性。封装性能实现的复杂性隐藏,减少出错的可能。
19
19
Original file line number Diff line number Diff line change @@ -286,7 +286,7 @@ function_name=iMethod | type=2 | fn_flags=258</li>
286
286
zend_do_end_class_declaration函数用来处理接口和类的中间代码
287
287
这两个函数在Zend/zend_complie.c文件中可以找到其实现。
288
288
289
- 在zend_do_begin_class_declaration中,首先会对传入的类名作一个转化,统一成小写,这也是为什么类名不区分大小的原因 ,如下代码
289
+ 在zend_do_begin_class_declaration中,首先会对传入的类名作一个转化,统一成小写,这也是为什么类名不区分大小写的原因 ,如下代码
290
290
291
291
[php]
292
292
<?php
Original file line number Diff line number Diff line change @@ -20,9 +20,9 @@ PHP中有一些特殊的函数和方法,这些函数和方法相比普通方
20
20
* 由ZendVM自动分情境进行调用;
21
21
* 不是必须的,按需定义,自动调用
22
22
23
- 从以上三个方面可以发现,关于魔术变量的关键理解 ,主要集中在两个方面:** 一,定义在哪里; 二,如何判断其存在并进行调用。**
23
+ 从以上三个方面可以发现,关于魔术方法的关键理解 ,主要集中在两个方面:** 一,定义在哪里; 二,如何判断其存在并进行调用。**
24
24
25
- 首先,魔术变量的存储在 ** _ zend_class_entry** 中的代码如下:(完整的** _ zend_class_entry** 代码见本章第一节)
25
+ 首先,魔术方法的存储在 ** _ zend_class_entry** 中的代码如下:(完整的** _ zend_class_entry** 代码见本章第一节)
26
26
27
27
[c]
28
28
struct _zend_class_entry {
@@ -47,7 +47,7 @@ PHP中有一些特殊的函数和方法,这些函数和方法相比普通方
47
47
...
48
48
}
49
49
50
- 这段代码明确的在对象内部定义了不同的指针来保存各种魔术变量 。
50
+ 这段代码明确的在对象内部定义了不同的指针来保存各种魔术方法 。
51
51
关于Zend VM对魔术方法的调用机制,由于每种方法的调用情境不同,笔者在这里也分开进行分析。
52
52
53
53
@@ -96,11 +96,11 @@ Zend VM在初始化对象的时候,使用了new关键字,对其OPCODE进行
96
96
在判断了** __ construct** 魔术变量存在之后,ZEND_NEW_SPEC_HANDLER中对当前EX(called_scope)进行了重新赋值,
97
97
使ZEND_VM_NEXT_OPCODE();将opline指针指向__ construct方法的op_array,开始执行__ construct魔术方法
98
98
99
- [c]
100
- EX(object) = object_zval;
101
- EX(fbc) = constructor;
102
- EX(called_scope) = EX_T(opline->op1.u.var).class_entry;
103
- ZEND_VM_NEXT_OPCODE();
99
+ [c]
100
+ EX(object) = object_zval;
101
+ EX(fbc) = constructor;
102
+ EX(called_scope) = EX_T(opline->op1.u.var).class_entry;
103
+ ZEND_VM_NEXT_OPCODE();
104
104
105
105
106
106
You can’t perform that action at this time.
0 commit comments