静态关键字static和self
static关键字是在类中描述成员属性和成员方法是静态的;前面声明了“Person”的人类,在“Person”这个类里如果我们加上一个“人所属国家”的属性,这样用“Person”这个类实例化出几百个或者更多个实例对象,每个对象里面就都有“所属国家”的属性了,如果开发的项目就是为中国人而开发的,那么每个对象里面就都有一个国家的属性是 “中国“其它的属性是不同的,如果我们把“国家”的属性做成静态的成员,这样国家的属性在内存中就只有一个,而让这几百个或更多的对象共用这一个属性。
作用:
static成员能够限制外部的访问,因为static的成员是属于类的,是不属于任何对象实例,是在类第一次被加载的时候分配的空间,其他类是无法访问的,只对类的实例共享,能一定程度对类该成员形成保护;
static方法是类中的一个成员方法,属于整个类,即使不用创建任何对象也可以直接调用!
class Ren { public $name="张三"; public static $zhongzu; //静态成员 //普通方法 function Say() { echo self::$zhongzu."你好"; } //静态方法 static function Run() { //echo $this->name; 静态方法不能调用非静态属性 echo self::$zhongzu; } } Ren::$zhongzu = "战斗民族";//静态属性赋值 Ren::Run(); //调用静态方法 $r = new Ren(); $r->Say();
结果:
//普通成员
//普通成员是属于对象的
//静态成员
//静态成员是属于类的
//普通方法里面可以调用静态成员
//静态方法里面不能调用普通成员
//self关键字 在类里面代表该类
抽象
抽象类
不能被实例化
做为父类使用
abstract class Demo { var $test; abstract function fun1(); abstract function fun2(); function fun3() { ... } } $demo = new Demo(); // 抽象类不能产生实例对象,所以这样做是错的,实例化对象交给子类 class Test extends Demo { function fun1() { ... } function fun2() { ... } } $test = new Test(); // 子类可以实例化对象,因为实现了父类中所有抽象方法
实例:
abstract class YunSuan { public $a; public $b; function Suan() { } } class Jia extends YunSuan { function Suan() { return $this->a+$this->b; } } class Jian extends YunSuan { function Suan() { return $this->a-$this->b; } } class Cheng extends YunSuan { function Suan() { return $this->a*$this->b; } } $cheng = new Cheng(); $cheng->a=10; $cheng->b=5; echo $cheng->Suan();
结果:50
接口
//极度抽象的类
//接口里面的方法主要是用来控制子类必须实现该方法
interface IUSB { function Read(); //接口里面只声明函数名 function Write(); } class ShuBiao implements IUSB //子类中必须继承父类中所有函数 { function Read() { echo "鼠标插上了"; } function Write() { echo "给鼠标传了数据"; } } $s = new ShuBiao(); $s->Read();
结果: