1、如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
<?php
class BaseClass{public function test(){echo "BaseClass::test() called".PHP_EOL;}final public function moreTesting(){echo "BaseClass::moreTesting() called".PHP_EOL;}
}class subClass extends BaseClass{public function moreTesting(){//父类声明为final,子类无法重载echo "subClass::moreTesting() called".PHP_EOL;}
}
?>
2、PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 。
<?php
class BaseClass{function __construct(){print "baseclass类中构造方法".PHP_EOL;}
}class SubClass extends BaseClass{function __construct(){parent::__construct();//显示调用父类构造方法print"subclass类中构造方法".PHP_EOL;}
}class OtherSubClass extends BaseClass{}$obj=new BaseClass;//父类构造方法$obj=new SubClass;//先调用父类,再调用子类$obj=new OtherSubClass;?>
执行结果:
3、static定义静态属性与方法
- 声明类属性或方法为 static(静态),就可以不实例化类而直接访问。
- 由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
- 静态属性不可以由对象通过 -> 操作符来访问。
<?php
class Foo{public static $mystatic="foo";public static function staticValue(){// echo $this->$mystatic;//this在静态方法中不可用return self::$mystatic;}
}print Foo::$mystatic.PHP_EOL;$foo=new Foo;print Foo::$mystatic;//直接用类名访问静态变量
print foo::$mystatic;//用实例化对象访问静态变量
//print $foo->$mystatic;//静态属性不可以由->操作符来访问。
print $foo->staticValue().PHP_EOL;//用实例化对象访问静态方法
print Foo::staticValue().PHP_EOL;//直接用类名访问静态方法?>
运行结果:
4、子类继承父类带有参数的构造方法。
<?php
class students{var $name,$age,$sex;function __construct($name,$age,$sex){$this->name=$name;$this->age=$age;$this->sex=$sex;}
}class master extends students{var $hobby,$address;function __construct($name,$age,$sex,$hobby,$address){parent::__construct($name,$age,$address);//执行父类构造方法$this->hobby=$hobby;$this->address=$address;}}
$m=new master("PHP","20","female","ok","usa");
?>
PHP是世界上最好的编程语言。