php反射api的一個小問題

來源:互聯網
上載者:User
手冊上寫php反射api中ReflectionClass的isSubClass方法接收的參數是一個字串類型,但是為什麼傳遞ReflectionClass對象進去,功能也是可以實現的?

class test1 {    public $a;}class test1 extends test{    public $b;}$object1 = new ReflectionClass('test1');$object2 = new ReflectionClass('test2');var_dump($object2 -> isSubclassOf($object2));var_dump($object2 -> isSubclassOf('test1'));

這兩種輸出都是boolean true,需要的參數是字串,但是傳遞對象參數也是可行的,這是為什嗎?

回複內容:

手冊上寫php反射api中ReflectionClass的isSubClass方法接收的參數是一個字串類型,但是為什麼傳遞ReflectionClass對象進去,功能也是可以實現的?

class test1 {    public $a;}class test1 extends test{    public $b;}$object1 = new ReflectionClass('test1');$object2 = new ReflectionClass('test2');var_dump($object2 -> isSubclassOf($object2));var_dump($object2 -> isSubclassOf('test1'));

這兩種輸出都是boolean true,需要的參數是字串,但是傳遞對象參數也是可行的,這是為什嗎?

因為在php的原始碼中這裡是可以傳入兩種類型,第一是string第二是reflectionclass。
github上的地址:github

代碼中很清楚的可以看到注釋中寫明

/* {{{ proto public bool ReflectionClass::isSubclassOf(string|ReflectionClass class)   Returns whether this class is a subclass of another class */

並且在接下來的switch語句中也進行了判斷

switch (Z_TYPE_P(class_name)) {        case IS_STRING:            //some code        case IS_OBJECT:            //some code        default:            //some code    }

php的外部維護者很多,所以文檔不是很詳細也是正常的,很多東西都需要自己去試。

大概手冊沒寫全。
is_subclass_of估計是參照這個函數,這個手冊說了可以傳遞對象。

這就算是php的一些漏洞(也算是優勢,畢竟靈靈活)。
推薦按照手冊上傳參數,因為這些小漏洞的話會在後續版本修補掉的。
或者你可以去看下php手冊的英文文檔,那個比中文文檔權威

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.