PHP中魔術方法的作用是什嗎?

來源:互聯網
上載者:User
關鍵字 php
魔術方法也用的蠻多,最近在想一個問題,到底PHP為什麼要加入魔術方法這個東西,是為了更好的支援物件導向還是?

請各位路過的不吝賜教,以解小弟的疑惑!

回複內容:

魔術方法也用的蠻多,最近在想一個問題,到底PHP為什麼要加入魔術方法這個東西,是為了更好的支援物件導向還是?

請各位路過的不吝賜教,以解小弟的疑惑!

為什麼加入魔術方法?為什麼叫魔術方法,這其實不是主要問題
比如toString這個東西,java可以直接覆蓋toString,js也可以定義toString,php為什麼叫_toString?
構造方法,為什麼python叫__init__,php叫__construct?
然後關於php的__construct,手冊裡寫到

為了實現向後相容性,如果 PHP 5 在類中找不到 __construct() 函數並且也沒有從父類繼承一個的話,它就會嘗試尋找舊式的建構函式,也就是和類同名的函數。因此唯一會產生相容性問題的情況是:類中已有一個名為 __construct() 的方法卻被用於其它用途時。

也就是說php和java一樣之前也是支援同名函數做建構函式的,為什麼之後該了,也就是你的迷惑,我的理解,一種命名習慣而已,你說按說法這些函數會在特殊場合被自動調用,叫做魔術方法理論上沒錯,但是java也有這些,為什麼java沒搞出這個名詞?

但是說句實在的,php非得整出魔術方法這個名詞來,而不像其他語言把他混合在其他定義裡,比如js的toString就可以做一些題的考點,而且容易被忽略,php如果定義了魔術方法,那你複習的時候肯定要這些全看一次。。倒是方便考生和應聘者了

其實還是為了更好的支援物件導向,下面是一個例子。。。

sum2($args[0], $args[1]);                    break;                case 3:                    //求和:三個數                    return $this->sum3($args[0], $args[1], $args[2]);                    break;            }        }    }    /**     * 利用魔術方法__callStatic實現偽重載。。。     * @return [type] [description]     */    public static function __callStatic($name, $args) {        if ($name === "area") {            switch (count($args)) {                case 1:                    //計算圓的面積                    return self::areaCircle($args[0]);                    break;                case 2:                    //計算矩形的面積                    return self::areaRectangle($args[0], $args[1]);                    break;            }        }    }    /**     * 計算圓的面積     * @param  [type] $r [description]     * @return [type]    [description]     */    public static function areaCircle($r) {        return pi() * $r * $r;    }    /**     * 計算矩形的面積     * @param  [type] $length [description]     * @param  [type] $width  [description]     * @return [type]         [description]     */    public static function areaRectangle($length, $width) {        return $length * $width;    }    /**     * 求和:兩個數     * @param  [type] $num1 [description]     * @param  [type] $num2 [description]     * @return [type]       [description]     */    public function sum2($num1, $num2) {        return $num1 + $num2;    }    /**     * 求和:三個數     * @param  [type] $length [description]     * @param  [type] $width  [description]     * @return [type]         [description]     */    public function sum3($num1, $num2, $num3) {        return $num1 + $num2 + $num3;    }}//測試開始echo Tools::area(2) . "
";echo Tools::area(2, 4) . "
";$tools = new Tools();echo $tools->sum(2, 3) . "
";echo $tools->sum(2, 3, 4) . "
";
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.