您的位置:首页 > 其它

必须掌握的面向对象中的小概念

2016-07-30 16:26 260 查看
1.常量

在类外定义常量,用define;在类内定义常量有const。

2.类访问与对象访问

凡是 需要通过 类来访问的资源,都可以使用范围解析操作符,即一对冒号 ::。以常量为例(常量又称类常量),访问常量:类名::常量;

而箭头 -> 是对象访问对象成员的操作符。

3.关键字

this,self,static(这三个关键字都只能用于类内)

访问对象的属性和方法,用this关键字,$this->属性名,$this->方法名。

访问类中的常量,用self关键字,self::常量名,当然也可以用类名::常量名。

static用于定义类中的静态属性和静态方法。访问静态属性与访问类常量一样,有两种方法。

类名::$静态变量名;self::$静态变量名(注意$符号不要漏了,这是与访问类常量不同的一点,静态属性的值是允许改变的)

注意:无论是哪个属性和方法,只要是属于类的,那就需要去用类访问(类名访问),当然在类内是可以用self代替的,对象是不可以的。

例如:

<?php
class Computer{
public $name =20;
public static $age=10;
}
$note = new Computer();
echo $note->age;//这样做程序时会报错的,因为静态成员是属于类成员
?>

4.克隆

我们知道通过=复制,传递的是一个引用,并不会产生新的对象,那么除了通过new关键字来生成一个对象,我们还可以通过克隆的方法来产生一个对象。语法非常的简单:

   新对象 = clone 旧对象;

PHP得到新对象的方法:

New 通过类得到对象                实例化

Clone 通过已有对象得到对象   克隆

5.魔术方法

什么魔术方法了?

不需要自动调用,在某些特定情况下系统自动调用的方法,称为魔术方法。特征是方法名都以__开头!

1)构造方法 __construct()

在实例化时被自动实例化好的对象调用。

2)克隆         __clone()
在克隆时,自动执行,在克隆时,不会触动构造方法。

注意:克隆也是由对象调用,所以克隆方法里面也可以使用this关键字,是由克隆出来的新对象调用克隆方法,那么this关键字代替的是克隆出来的对象。并且在克隆的过程中是不会触动(调用)构造方法的。

3)析构方法 __destruct()

虽然脚本运行结束后,php会自动释放资源,但是在做一些大型的项目的时候,很多时候,如果大量资源已经没有用时,为了节省空间,就需要提前释放资源,这个时候我们的析构方法就起作用了。

析构函数在类实例的引用失效时、对象被销毁、超出作用域、以及任意关闭序列时,将被调用。    注意:当子类定义了自己的析构函数,需要使用parent::__destruct()来调用父类的析构函数,如果子类没有显式的定义构造函数,那么子类将继承父类的构造函数,并直接运行。 

4)__sleep()

序列化时执行的魔术方法

该方法,会返回一个数组,数组内的每一个元素是一个当前对象的属性名。凡是出现在数组内的元素,所代表的属性 都会被保存。

5)__wakeup()

反序列化时执行的魔术方法

该方法,对不能序列化保存的数据进行重新初始化。

6)__autoload()

      当程序需要某个类(实例化时,反序列化),如果当前程序没有载入相关类,会自动地调用程序中的函数(__autoload)来完成类文件的加载。__autoload函数虽然会自动调用,但是需要手动定义。此函数需要接收一个参数,为当前需要的类名。

注意,__autoload()函数,即使执行,也不能自动加载类文件,需要我们在函数内,利用include系列代码完成。因此 autoload只是一个加载类文件的时机。因此在 此函数内,应该通过 得到的类名,得到需要加载的类文件才可以。

例如:

<?php
sql = new Mysql();
/*一下代码将会自动调用执行*/
function __autoload($className){
include $className.".class.php";
}
?>
Tip:因此 自动加载的大前提,一定能通过 类名 计算出 文件名才可以!

6.abstract

用于定义抽象类和抽象方法,不能被实例化。

对于抽象类需要注意的是:一个抽象类,除列可以拥有抽象方法外(至少含有一个抽象方法),还可以存在普通成员。

7.implements

继承接口的时候需要用到这个关键字。关于接口,接口里面的方法全都是抽象并且是公开的,接口中也能定义数据,但必须是常量,换一种说法就是接口中只能定义常量和抽象方法。还有接口不是类,它和类不是同一个概念。

可以通过下面两个函数验证:

Class_exists();此函数 可以 检测一个类是否存在!

Interface_exists();判断接口是否存在!

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: