回顾
面向对象编程:类,对象和实例化
类成员:属性,方法和类常量,访问修饰限定符(public,protected和private)
对象访问属性和方法:对象->属性/方法(实参列表);
内部访问:$this,代表当前进入到类内部的对象
魔术方法:构造方法和析构方法
对象传值,对象比较
面向对象
类的加载
因为要得到一个类的对象,必须先保证类结构已经在内存中(代码段)。
自动加载
在需要用到类的时候,系统会根据指定好的路径去找对应的类文件(文件名为基础),然后根据用户指定的操作,对文件进行处理(加载)。
魔术函数:会自动被调用的函数
__autoload():自动加载函数,所有的自动(魔术)都是提供了一个机制,能够被系统自动调用,但是内部的结构都是用户自己定义。
自动加载通常的处理方式
自动加载是PHP对于类的加载的一种处理机制(小系统),专门负责加载文件。
1. 实例化的第一步:先去代码段中查看对应的类是否存在
2. 如果不存在,系统会查看是否开启了自动加载机制(__autoload)
3. 如果有自动加载存在,那么系统就会调用自动加载函数,传入参数:类名
注意:自动加载的使用前提,是类文件与类之间的关系特别清楚(完全相同),而且对应的类文件名字,必须有规则(类名.class.php)
类常量的访问
类常量属于类,而不属于对象。对象是不能访问。
常量的访问必须通过类来实现:
类名::常量名,::叫做范围解析操作符
因为在类的内部经常性的使用类来访问类中的成员,所在类的内部使用类进行访问的时候,有一个类似$this代表对象的关键字:self,自己的意思,代表当前类名(self不能单独打印输出,self必须结合范围解析操作符)
常量的内存分布
self与$this的区别
1. self代表类,$this代表对象
2. self访问类内部的常量和静态属性和静态方法,$this访问对象的属性和普通方法
3. self必须配合范围解析操作符(::)才能生效,$this代表对象,对象本来就是一种数据类型,所以$this可以单独被打印。
4. 能用$this的地方,一定可以使用self,但是能使用self的地方不一定可以使用$this
类常量,静态属性和静态方法的内部访问使用self;
普通方法,属性的内部访问使用$this
静态
静态分为两个部分:静态属性和静态方法
静态的东西都是给类用的(包括类常量),非静态的都是给对象用的
静态属性
在定义属性的时候,使用关键字static修饰的属性称之为静态属性。
静态属性属于类不属于对象。
对象统计器:统计当前类被实例化了多少个对象。
静态方法
使用static关键字修饰的方法叫做静态方法。(静态方法原则上是给类用的)
能用静态解决的问题,不用普通方法解决问题(静态的东西可以直接使用类访问,不需要通过对象实例化,因此节省了内存空间,提升了效率)。
对象访问静态方法(可以)
静态方法和非静态方法的区别
静态方法里面不能使用$this关键字。
特别注意:
1. 在写代码的过程中,严格遵循大小写规范
2. 严格遵循:静态的内容给类访问,非静态的是给对象访问,不要跨界操作
魔术方法
对象是一种复合数据类型,不能直接使用echo进行输出操作。
__tostring():指的是当对象需要被转换成字符串的时候,会自动调用的方法
对象默认的是引用传递,所以导致对象的产生只能是new才能产生,但是有时候需要通过对象来产生对象,这时候需要应用到一个克隆的技术。
语法:变量 = clone 对象变量:
魔术方法:__clone(),克隆对象的时候,被克隆出来的对象会去调用的方法。
魔术常量
__CLASS__:代表当前类名,只能类的内部使用