静态方法的延迟绑定

例如: php

在父类中含有静态方法a,b,子类中含有静态方法a  spa

父类的b方法调用自身的a方法,这时候当子类调用父类的b方法时, code

self::a()是调用父类自身的a方法呢,仍是调用子类本身的a方法 io

答案:self调用的是父类的a方法 function

父类中又增长一个静态方法c,用static::a(),这时候调用的是父类的仍是子类的a方法呢? class

答案:static调用的是子类的a方法 test

<?php
    class Test
    {
        public static function a()
        {
            echo '父类的a方法<br/>';
        }

        public static function b()
        {
            self::a();
            echo '父类的b方法<br/>';
        }

        public static function c()
        {
            static::a();// 子类没有c方法,用static::a(),则调用子类的a()方法
        }
    }

    class child_test extends Test
    {
        public static function a()
        {
            echo '子类的a方法<br/>';
        }
    }

    child_test::b();
    child_test::c();
?>
相关文章
相关标签/搜索