//静态
//普通成员:普通成员是属于某一具体对象的。
//静态成员:静态成员是属于类的。关键字:static
class FenBi
{
public $length=10; //粉笔长度 粉笔的长度只能用来描述单个粉笔也就是对象。所以是普通成员变量。
public static $color="红"; //粉笔颜色 粉笔的颜色可以用来描述粉笔这个类的所以可以是静态成员变量。
public static function test() //定义一个静态的test方法
{
echo "静态成员方法" . self ::$color; //静态成员方法可以调用静态成员。做法是在成员方法里用关键字self ::加静态成员变量, } //self表示该类,self也可以换成FenBi::类名来调用成员变量。
public function ceshi() //定义一个普通成员方法ceshi
{
echo self ::$color; //用普通成员方法ceshi来调用静态成员变量$color是可以的,因为静态属于类,
} //普通属于对象。既然有对象了就类存在可调。
}
$f =new FenBi();
$f->length; //普通成员调用方式
FenBi ::$color="蓝色"; //静态成员的调用方式
FenBi :: test(); //静态方法的调用方式。静态的成员在调用的时候不需要造对象,直接使用类来调用就可以,因为它是属于类的。
//静态的成员方法里面是不能调用普通成员的。
$f->ceshi(); //对象f来调用里面的成员方法测试
//抽象
//关键字:abstract
//抽象类由于过于抽象了,所以不能被实例化,做为父类存在。但是可以被继承。
abstract class DongWu //造一个抽象的动物类
{
public $name; //定义一个成员变量name
abstract public function test(); //因为定义的这个抽象方法test本来就是抽象的,既然是抽象的里面怎么会包含具体的内容,
}//所以去掉大括号只定义一个名称来定义方法。记住抽象方法一定不能有函数体的也就是大括号里面的内容,因为它过于抽象了,不能直接使用,所以没有必要加。
class Dog extends DongWu //再造一个狗类这个狗类是上面动物类的子类。
{
public function test() //如果不让其报错,则需要在子类里面对父类继承的抽象方法进行重写。
{
echo "重写了";
}
}
$d= new Dog();
var_dump($d);
//子类可以继承父类里面的一切但是除了具有private私有的以外。
//如果一个子类去继承了一个父类,这个父类里面有抽象方法,那么子类必须要实现,否则的话就会被报错。
//如果这个子类非不想实现父类里面的抽象方法的话,那么也可以,但前提条件是这个子类也必须是抽象的。不实现也好,在前面加上private,变成抽象类。
//子类要么去实现父类的抽象方法(用重写的方法去实现父类的抽象方法),要么自己做成一个抽象类。要么自己就会被报错。
//只要这个类里面包含有抽象方法也就是有abstract关键字,那么这个类就必须是抽象类。
//抽象方法里面不能包含函数体,其具体功能在子类里面通过重写实现。
//定义抽象类的作用就是提供一个程序的指导作用,一个程序有可能会有很多很多功能,我用一个父类来规定这个程序里面包含哪些功能,那么就硬性规定了下面的子类里面必须也得有父类我们所规定的方法和功能。限制,规范下面子类的行为。
//接口 极度抽象的类 它不使用class来定义了,使用interface来定义。 定义的名字一般以大写的I开头。
//接口里面没有成员变量。
//接口里面的所有的成员函数全部为抽象的
interface IUSB
{
public function read(); //读的方法。不用在public前面写abstract,因为接口里面的方法函数都是抽象的,已成为默认。
public function write(); //写的方法。
}
class ShuBiao implements IUSB //定义一个鼠标类是IUSB的子类,这里不用extends关键字继承。用implements这个关键字来表示实现接口。
{
public function read() //鼠标如果想插入IUSB接口里面的话就必须得有父类IUSB里面的抽象方法才可以。所以在鼠标类里面定义这两个方法。
{
echo "鼠标插入了";
}
public function write()
{
echo "往鼠标写内容";
}
}
$s = new ShuBiao();
$s->resd();