面向对象的语义特征

我们知道,编程语言是用来对这个世界建模的,而面向对象则是建模方式中比较推崇的一种方法。我们来说一说面向对象的语义特征,进而让我们理解编程语言的本质。

类型角度

在汇编语言里面,是只支持简单类型的,例如整型。如果我们要实现稍微复杂一点的类型,例如字符串,那么,我们就需要一块内存,然后往这块内存里面挨个的放入字符,然后,我们把这块内存存储的内容,叫做字符串。同样的道理,类也是一种复杂的类型。

作用域角度

分为类的作用域和对象成员的作用域。

对于类来说,如果没有声明命名空间,那么,类的作用域就是根命名空间;如果有命名空间,那么类的作用域就是这个命名空间。

对于对象成员来说,成员的作用域则是这个对象。我们是通过这个对象来找到这个成员的(当然,如果你是静态成员,那么,也可以通过类来找到)。

所以,我们在实现面向对象的时候,必定会把这个对象放入栈帧里面,例如PHP里面的execute_data::This。而我们在方法里面使用的$this,实际上就是当前栈帧的execute_data::This。例如:

1
2
3
4
5
6
7
8
9
10
11
12
class Foo
{
public $a;

public $b;

public function __construct($a, $b)
{
$this->a = $a;
$this->b = $b;
}
}

我们在构造函数里面,通过$this来访问成员a。那么,我们就是在构造函数的这个栈帧里面,找到$this变量,然后,再查找这个对象的a属性。