20150110--魔术方法魔术常量+面向对象-01

image

回顾

面向对象编程:类,对象和实例化

类成员:属性,方法和类常量,访问修饰限定符(public,protected和private)

对象访问属性和方法:对象->属性/方法(实参列表);

内部访问:$this,代表当前进入到类内部的对象

魔术方法:构造方法和析构方法

对象传值,对象比较

面向对象

类的加载

因为要得到一个类的对象,必须先保证类结构已经在内存中(代码段)。

clip_image002

自动加载

在需要用到类的时候,系统会根据指定好的路径去找对应的类文件(文件名为基础),然后根据用户指定的操作,对文件进行处理(加载)。

魔术函数:会自动被调用的函数

__autoload():自动加载函数,所有的自动(魔术)都是提供了一个机制,能够被系统自动调用,但是内部的结构都是用户自己定义。

clip_image004

自动加载通常的处理方式

clip_image006

自动加载是PHP对于类的加载的一种处理机制(小系统),专门负责加载文件。

1. 实例化的第一步:先去代码段中查看对应的类是否存在

2. 如果不存在,系统会查看是否开启了自动加载机制(__autoload)

3. 如果有自动加载存在,那么系统就会调用自动加载函数,传入参数:类名

注意:自动加载的使用前提,是类文件与类之间的关系特别清楚(完全相同),而且对应的类文件名字,必须有规则(类名.class.php)

类常量的访问

类常量属于类,而不属于对象。对象是不能访问。

常量的访问必须通过类来实现:

类名::常量名,::叫做范围解析操作符

clip_image008

因为在类的内部经常性的使用类来访问类中的成员,所在类的内部使用类进行访问的时候,有一个类似$this代表对象的关键字:self,自己的意思,代表当前类名(self不能单独打印输出,self必须结合范围解析操作符)

clip_image010

常量的内存分布

clip_image012

self与$this的区别

1. self代表类,$this代表对象

2. self访问类内部的常量和静态属性和静态方法,$this访问对象的属性和普通方法

3. self必须配合范围解析操作符(::)才能生效,$this代表对象,对象本来就是一种数据类型,所以$this可以单独被打印。

4. 能用$this的地方,一定可以使用self,但是能使用self的地方不一定可以使用$this

clip_image014

类常量,静态属性和静态方法的内部访问使用self;

普通方法,属性的内部访问使用$this

静态

静态分为两个部分:静态属性和静态方法

静态的东西都是给类用的(包括类常量),非静态的都是给对象用的

静态属性

在定义属性的时候,使用关键字static修饰的属性称之为静态属性。

clip_image016

静态属性属于类不属于对象。

clip_image018

对象统计器:统计当前类被实例化了多少个对象。

clip_image020

静态方法

使用static关键字修饰的方法叫做静态方法。(静态方法原则上是给类用的)

clip_image022

能用静态解决的问题,不用普通方法解决问题(静态的东西可以直接使用类访问,不需要通过对象实例化,因此节省了内存空间,提升了效率)。

对象访问静态方法(可以)

clip_image024

静态方法和非静态方法的区别

clip_image026

静态方法里面不能使用$this关键字。

特别注意:

1. 在写代码的过程中,严格遵循大小写规范

2. 严格遵循:静态的内容给类访问,非静态的是给对象访问,不要跨界操作

魔术方法

对象是一种复合数据类型,不能直接使用echo进行输出操作。

clip_image028

__tostring():指的是当对象需要被转换成字符串的时候,会自动调用的方法

clip_image030

对象默认的是引用传递,所以导致对象的产生只能是new才能产生,但是有时候需要通过对象来产生对象,这时候需要应用到一个克隆的技术。

语法:变量 = clone 对象变量:

clip_image032

魔术方法:__clone(),克隆对象的时候,被克隆出来的对象会去调用的方法。

clip_image034

魔术常量

__CLASS__:代表当前类名,只能类的内部使用

clip_image036

原文地址:https://www.cnblogs.com/lifushan/p/5414866.html