1、public
可以在类内、类外被其他的类和对象调用。子类可以继承和使用父类中所有的公共成员。
对于成员方法,如果没有写关键字,默认就是public。
2、private
只能在所属类的内部被调用和修改,不可以在类外被访问,即使是子类中也不可以。
3、protected
可以在本类和子类中被调用,其他地方则不可以被调用。
4、类的继承
(1) class 子类名称 extends 父类名称{ }
(2) parents:: 父类的成员方法(参数); //通过parent::关键字在子类中调用父类中的成员方法
5、抽象类和接口
抽象类和接口都是不能被实例化的特殊类。它们都是配合面向对象的多态性一起使用。
(1) 抽象类只能作为其他类的父类来使用。
abstract class 抽象类名称{
//抽象类的成员变量列表
abstract function 成员方法1(参数);
abstract function 成员方法2(参数);
}
抽象类和普通类相似,包含成员变量、成员方法。两者的区别在于:抽象类至少要包含一个抽象方法。抽象方法没有方法体,其功能的实现只能在子类中完成。抽象方法也是使用abstract关键字来修饰。
抽象类和抽象方法主要应用于复杂的层次关系中,这种层次关系要求每一个子类都包含并重写某些特定的方法。
(2)接口
继承特性简化了对象、类的创建,增加了代码的可重用性。但PHP只支持单继承。如果想实现多重继承,就要使用接口。PHP可以实现多个接口。
interface 接口名称{
//常量成员 //接口中不能声明变量,只能使用const关键字声明为常量的成员属性
//抽象方法 //成员方法必须是抽象方法
}//接口中所有成员必须具备public的访问权限
接口之间可以使用extends实现继承。
接口可以直接使用接口名称在接口外去获取常量成员的值。
在子类中继承接口使用implements关键字。实现多个接口的继承,每个接口之间使用逗号连接。
class 子类名 implements 接口1,接口2{ }
**既然通过子类继承了接口中的方法,那么接口中的所有方法必须都在子类中实现,否则PHP将抛出错误信息。
6、final关键字
被final修饰过的类和方法就是“最终的版本”,
final class class_name{
//..
}
说明该类不可以再被继承,也不能再有子类。
final function method_name()
说明该方法在子类中不可以进行重写,也不可以被覆盖。
7、static关键字——声明静态类成员
静态属性和静态方法不需要在被类实例化的情况下就可以直接使用。在对象被销毁后,仍然保存被修改的静态数据,以便下次继续使用。
(1) 静态属性
静态属性就是使用static修饰的成员属性,它属于类本身而不属于类的任何实例。它相当于存储在类中的全局变量,可以在任何位置通过类来访问。静态属性访问的语法如下:
类名称::$静态属性名称
其中“::”被称为范围解析操作符,用于访问静态成员、静态方法和常量,还可以用于覆盖类中的成员和方法。
如果要在类内部的成员方法中访问静态属性,那么在静态属性的名称前加上操作符"self::"即可。
(2)静态方法
静态方法不受任何对象的限制,可以不通过类的实例化直接引用类中的静态方法。
类名称::静态方法名称([参数1,参数2,....])
同样如果要在类内部的成员方法中引用静态方法,那么在静态方法的名称前加上操作符"self::"即可。
**在静态方法中,只能调用静态变量,而不能调用普通变量,普通方法则可以调用静态变量。
8、clone关键字——克隆对象
使用clone克隆的对象与原对象没有任何关系,它是将原对象从当前位置重新复制了一份,也就是相当于在内存中新开辟了一块空间。
$克隆对象名称=clone $原对象名称;
对象克隆成功后,它们中的成员方法、属性以及值是完全相同的。如果要为克隆后的副本对象在克隆时重新为成员属性赋初始值,那么就要用到魔术方法“__clone()”。
“__clone()”自动包含$this和$that两个对象的引用,$this是副本对象的引用,$that是原本对象的引用。
<?php
class Book{ //类Book
private $object_type = 'book'; //声明私有变量$object_type,并赋初值为book
public function setType($type){ //声明成员方法setType,为变量$object_type赋值
$this -> object_type = $type;
}
public function getType(){ //声明成员方法getType,返回变量$object_type的值
return $this -> object_type;
}
public function __clone(){ //声明__clone()方法
$this ->object_type = 'computer'; //将变量$object_type的值修改为computer
}
}
$book1 = new Book(); //实例化对象$book1
$book2 = clone $book1; //使用普通数据类型的方法给对象$book2赋值
echo '对象$book1的变量值为:'.$book1 -> getType(); //输出对象$book1的值
echo '<br>';
echo '对象$book2的变量值为:'.$book2 -> getType();
?>