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

















