面向对象程序设计是一种程序设计范型,同时也是一种程序开发方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和可扩展性。
OOPL(Object-Oriented Programming Language) 可以提高程序的封装性、复用性和可维护性,但也仅仅是可以,具体能否实现这些优点,还要取决于使用这些语言的程序员。
类是对象的抽象组织,对象是类的具体存在
一个类的设计需要能充分展示其最重要的属性和方法,并且能够和其它事物相区分。只有类本身有意义,从抽象到具体化的实例化才会有意义。
类定义了一系列的属性和方法,并提供了实际的操作细节,这些方法可以用来对属性进行加工。
对象含有类属性的具体值,这就是类的实例化。这是由于属性的不同,才能区分不同的对象。
类与对象的关系类似一种服务于被服务、加工与被加工的关系,具体而言,就如同原材料与流水线的关系,只要在对象上调用类中所存在的方法,就可以对类的属性进行加工,并且展示其功能。
对象就是一堆数据,可以把一个对象存储起来,以便需要时使用,这就是对象的序列化。
所谓序列化,就是把保存在内存中的各种对象状态(属性)保存起来,并且在需要时可以还原出来。
例:
$str = serialize($student);
echo $str;
file_put_contents('store.txt',$str);
反序列化:
$str = file_get_contents('store.txt');
$student = unserialize($str);
strudent->say();
在序列化和反序列化时都需要包含类的对象的定义,不然有可能出现在反序列化对象时,找不到该对象的类的定义,而返回不正确的结果。
类也是一种变量,不同的是,其携带了对象的属性和类的入口
序列化后的对象会附带所属的类名,这个类名保证此对象能给在执行类的方法(也是自己所能执行的方法)时,可以正确的找到方法所在的代码空间(即对象所拥有的方法存储在类里)
魔术方法:以两个下划线“__”开头、具有特殊作用的一些方法,可以看做PHP的"语法糖"。
__construct():构造方法,是一个标准的魔术方法,该方法往往用于对类进行初始化时执行一些初始化操作。
__destruct():析构方法,会在某个对象所有引用都被删除,或者当前对象被显示销毁时执行
__set() 和 __get() : 手册中,将这两个方法归纳与重载。
php所提供的“重载”指动态“创建”类属性和方法。
如果为了方便,类属性在任意时候都设置成Public权限显然是不合适的,也不符合面向对象的思想。
__call() 和 __callStatic() 方法:处理调用不存在的方法时的问题。
当调用一个不可访问的方法(如未定义,或者不可见)时,__call()会被调用。其中$name参数是调用的方法名称,$arguments参数是一个数组,包含着要传递给方法的参数。