1、基本内容
注意事项:
- 无论是使用“$this->”还是使用“对象名->”格式,后面的变量是没有$符号的,如$this->value;
- 通过“类名::常量”方式类访问类常量的,如bastBall::Type;
- 在PHP中使用“垃圾回收”机制,不需要手动创建析构函数。不再使用的对象会自动清楚,释放内存;
- 对于成员方法,如果没有指定关键字,则默认是public,这一点与C++不同;
- 被protected修饰的类成员,可以在本类和子类中被调用,其它地方不可以,这也与C++不同;
- 在静态方法中,只能调用静态变量,而不能调用普通变量,而普通方法中可以调用静态变量;
- 在类内部访问静态成员使用“self::静态变量”,在类外部使用“类名::静态变量”;
- 构造函数__construct及析构函数__destruct不能声明为私有类型;
- finale修饰的类不可被再继承,也不能再有子类。finale修饰的方法不可以进行重写,也不可以被覆盖;
- 抽象类是一种不能被实例化的类,只能作为其它的父类来使用。抽象类包含变量、成员方法,至少要包含一个抽象方法。抽象类和抽象方法主要用于复杂的层次关系中。
- PHP只支持单继承,要想实现多继承就要使用接口。接口类中只能包含未实现的方法和一些成员变量。接口中的类成员必须使用public来修饰。接口类中的所有未实现的方法必须要在子类中实现;
- 类常量前面不加$符号。
【例1】类的定义及使用
<?php
class SportObject{
const TYPE='Sports';
static $counter=0;
private $name;
private $age;
private $sex;
public function __construct($name,$age,$sex){
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
self::$counter++;//计数
}
public function __destruct(){
echo self::TYPE.'调用了析构函数';//类中访问常量使用self
}
public function PrintInfo(){
echo $this->name.',';
echo $this->age.',';
echo $this->sex.'<p>';
}
public function IsBoy(){
return $this->sex='男' ? true : false;
}
public function ShowCounter(){
echo '总共创建了:'.self::$counter.'个实例';
}
}
$so=new SportObject('张三',22,'男');
$so->PrintInfo();//调用成员方法
echo $so->IsBoy();
echo SportObject::TYPE;//访问类的常量
$sp2=new SportObject('张琴',25, '女');
$sp2->ShowCounter();
?>
2、继承
【例2】继承
<?php
class SportObject{
protected $name;
private $age;
private $sex;
public function __construct($name,$age,$sex){
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
self::$counter++;//计数
}
public function PrintInfo(){
echo '姓名'.$this->name.'<p>';
}
}
class BasketBallSports extends SportObject{
private $height;
public function __construct($name, $height){
$this->name=$name;
$this->height=$height;
}
public function PrintInfo(){ //覆盖父类的方法
echo '身高:'.$this->height.'<p>';
}
}
$sp1=new BasketBallSports(