Late Static Bindings

考虑下述代码的输出

<?php
class clsParent {
    static public function say( $str ) {
        self::do_print($str);
    }

    static public function do_print( $str ) {
        echo "parent says $str";
    }
}

class clsChild extends clsParent{
    static public function do_print( $str ) {
        echo "child says $str";
    }
}

clsChild::say('Hello');
?>

你可能很希望输出 'child says Hello',但是实际上输出的是 'parent says Hello'。这是因为 self:: 指向的是类的本身,也就是 clsParent(同道理,__CLASS__ 也是一样)。

针对这一情况,PHP5.3 [引入了