前面的话php实现面向对象的一个显著特征是大量使用关键字,本文将详细介绍关键字
publicpublic表示公有,它具有最大的访问权限,被定义为公有的类成员可以在任何地方被访问
如果属性用 var 定义,则被视为公有,如果方法没有设置关键字,则该方法默认为公有
phpclass demo{ public $public = 1; function test($var){ echo {$var}000; }}$d1 = new demo;$d1->test($d1->public);//1000?>
protectedprotected表示受保护的,被定义为受保护的类成员则可以被其自身以及其子类和父类访问
phpclass demo{ protected function fn(){ echo '111'; }}class demo1 extends demo{ function test(){ parent::fn(); } }$d1 = new demo1;$d1->test();//111?>
privateprivate表示私有的,被定义为私有的类成员则只能被其定义所在的类访问
phpclass demo{ private $private = 1; function test(){ echo($this->private); }}$d1 = new demo;$d1->test();//1?>
finalphp5新增了final关键字,它只能用来修饰类和方法,不能使用final这个关键字来修饰成员属性,因为final是常量的意思,我们在php里定义常量使用的是define()函数和const关键字,所以不能使用final来定义成员属性
如果父类中的方法被声明为final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承
phpclass baseclass { public function test() { echo baseclass::test() called\n; } final public function moretesting() { echo baseclass::moretesting() called\n; }}class childclass extends baseclass { public function moretesting() { echo childclass::moretesting() called\n; }}// results in fatal error: cannot override final method baseclass::moretesting()?>
staticstatic关键字表示静态的意思,用于修饰类的成员属性和成员方法(即为静态属性和静态方法)
类中的静态属性和静态方法不用实例化(new)就可以直接使用类名访问
[注意]静态属性不能通过一个类已实例化的对象来访问,但静态方法可以
由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用,静态属性不可以由对象通过 -> 操作符来访问
用静态方式调用一个非静态方法会导致一个 e_strict 级别的错误
就像其它所有的 php 静态变量一样,静态属性只能被初始化为文字或常量,不能使用表达式。所以可以把静态属性初始化为整数或数组,但不能初始化为另一个变量或函数返回值,也不能指向一个对象
phpclass foo{ public static $my_static = 'foo'; public function staticvalue() { return self::$my_static; }}class bar extends foo{ public function foostatic() { return parent::$my_static; }}print foo::$my_static . \n;//'foo'$foo = new foo();print $foo->staticvalue() . \n;//'foo'print $foo::$my_static . \n;//'foo'print $foo->my_static . \n; //报错 ?>
const可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用$符号,而是使用const
常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用
phpclass myclass{ const constant = 'constant value'; function showconstant() { echo self::constant . \n; }}echo myclass::constant . \n;//'constant value'$classname = myclass;echo $classname::constant . \n; //'constant value'$class = new myclass();$class->showconstant();//'constant value'echo $class::constant.\n;//'constant value'?>
this当一个方法在类定义内部被调用时,有一个可用的伪变量this,特殊对象的引用this就是在对象内部的成员方法中,代表本对象的一个引用,但只能在对象的成员方法中使用,不管是在对象内部使用$this访问自己对象内部成员。还是在对象外部通过对象的引用名称访问对象中的成员,都需要使用特殊的运算符“->”来完成访问
[注意]this在静态方法中不可用
phpclass a{ function foo() { if (isset($this)) { echo '$this is defined ('; echo get_class($this); echo )\n; } else { echo \$this is not defined.\n; } }}class b{ function bar() { // note: the next line will issue a warning if e_strict is enabled. a::foo(); }}$a = new a();$a->foo();//$this is defined (a) a::foo();//$this is not defined. $b = new b();$b->bar();//$this is defined (b) b::bar();//$this is not defined.?>
self在类的方法中,不能用this来引用静态变量或静态方法,而需要用self来引用
phpclass myclass{ const constant = 'constant value'; static function showconstant() { echo self::constant . \n; }}$var = new myclass;echo $var->showconstant();//constant value?>
parentparent用于调用父类中定义的成员方法或常量
phpclass myclass{ function fn(){ echo('111'); } const a = 'a';}class class1 extends myclass{ function test(){ echo parent::fn().parent::a; }}$var = new class1;$var->test();//111a?>
