1.静态
普通成员:是属于对象的
静态成员:a.是属于类的;
b.定义时加上关键字 static ;
c.关键字 self:在类中代表该类;
d.调用静态成员符号双冒号::
普通方法是可以调用静态成员的; 静态方法不能调用普通成员
例如:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class Ren{ public $name; public static $zhongzu; //将普通成员变量变为静态成员变量,加上关键字 static //普通方法 function Say() { echo Ren::$zhongzu."你好"; //echo self::$zhongzu."你好"; //关键字 self:在类中代表该类: 类名修改,可以用这个关键字 } }Ren::$zhongzu="战斗民族"; //调用静态成员使用双冒号::$r = new Ren();$r->Say(); //普通方法可以调用静态方法 |
输出结果就是:战斗民族你好
2.抽象类
抽象类a.它不能被实例化, b.它作为父类使用, c.关键字 abstract
例如:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
abstract class Dongwu //使用关键字 abstract 可以成为抽象类{ public $name; public $age; function Run() { echo "跑"; }}class Dog extends Dongwu //继承父类{ }$d = new Dog();$d->Run(); |
实例化子类继承父类就可以输出正确
注意:强行实例化抽象类,会出现错误
抽象类的扩展功能很强,可以不动源代码的基础上扩展出其他的类
例如:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
abstract class YunSuan //抽象类的关键字 abstract{ public $a; public $b; function Suan() { }}//Jia继承YunSuan并且修改Suan方法class Jia extends YunSuan{ function Suan() { return $this->a+$this->b; }}//Cheng继承YunSuan并且修改Suan方法class Cheng extends YunSuan{ function Suan() { return $this->a*$this->b; }}$J = new Jia();$J->a=2;$J->b=10;echo $J->Suan(); |
3.接口
接口:a.极度抽象的类
b.定义方式 :interface
c.接口中的方法是控制子类必须实现某些功能(接口中出现的方法,子类必须实现)
d.实现接口 关键字:implements
例如:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
interface IUSB //I开头,I就是定义方式的开头{ function Read(); //成员方法:没有函数体,只声明函数名 function Write();}class ShuBiao implements IUSB //实现接口 关键字:implements{ function Read() { echo "鼠标插上"; } function Write() { echo "chuanshu"; }}$s= new ShuBiao();$s->Read(); |
输出结果就是:鼠标插上
注意:如果子类中没有把父类的方法全部实现,那么输出时会报错;如果子类把父类的方法全部实现了,那么就会输出正确的调用方法答案