靜態方法的延遲綁定

例如: 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();
?>
相關文章
相關標籤/搜索