对象与类

来源:互联网 发布:数据分析师研究生待遇 编辑:程序博客网 时间:2024/06/06 08:42

在前面代码(两篇博客)中定义了一个类,并创建了这个类的对象,把前面产生的对象作为这个新对象的一个熟悉,完整代码如下:

class Person{    public $name;    public $gender;    public function say()    {        echo $this->name,"\tis\t",$this->gender,"\r\n";    }}class family{    public $people;    public $location;    public function __construct($p,$l)    {        $this->people = $p;        $this->location = $l;    }}$student = new person();$student->name = 'Tom';$student->gender = 'male';$student->say();$tom = new family($student,'peking');echo serialize($student);$student_arr = ['name'=>'Tom','gender'=>'male'];echo "\n";echo serialize($student_arr);print_r($tom);echo "\n";echo serialize($tom);

输出结果如下:

Tom is male
O:6:"Person":2:{s:4:"name";s:3:"Tom";s:6:"gender";s:4:"male";}
a:2:{s:4:"name";s:3:"Tom";s:6:"gender";s:4:"male";}family Object
(
    [people] => Person Object
        (
            [name] => Tom
            [gender] => male
        )


    [location] => peking
)


O:6:"family":2:{s:6:"people";O:6:"Person":2:{s:4:"name";s:3:"Tom";s:6:"gender";s:4:"male";}s:8:"location";s:6:"peking";}

可以看出,序列化后的对象会附带所属类名,这个类名保证此对象能够在执行类的方法(也是自己所能执行的方法)时,可以正确地找到方法所在的代码空间(即对象所拥有的方法存储在类里)。另外,当一个对象的实例变量引用其他对象时,序列化该对象时也会对引用对象进行序列化。

基于如上分析,可以总结出对象和类的概念以及二者之间的关系:

  • 类是定义一系列属性和操作的模板,而对象则把属性进行具体化,然后交给类处理。
  • 对象就是数据,对象本身不包含方法。但是对象有一个“指针”指向一个类,这个类里可以有方法。
  • 方法描述不同属性所导致的不同表现。
  • 类和对象是不可分割的,有对象就biubiu有一个类和其对应,否则这个对象也就成了没有亲人的孩子(但有一个特殊情况存在,就是由标量进行强制类型转换的object,没有一个类和它对应。此事,PHP中一个称为“孤儿”的stdClass类就会收留这个对象)。
理解了以上四个概念,集合现实世界从实现和存储理解对象和类,这样就不会把二者看成一个抽象、神秘的东西,也就能写出符合现实世界的类了。

如果需要一个类,要从客观世界抽象出一套规则,就得总结这类事物的共性,并且让它可以与其他类进行区分。而这个区分的依据就是属性和方法。区分的办法就是实例化出一个对象,是骡子是马,拉出来溜溜。

现在,你是否对“白马非马”这个典故有了新的认识?

0 0
原创粉丝点击