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是世界上最好的编程语言。