文章出處

__call()
   當對象訪問不存在的方法時,__call()方法會被自動調用
__callStatic()
   當對象訪問不存在的靜態方法時,__callStatic()方法會被自動調用

這兩個方法在PHP里面也叫方法的重載(overloading)
   注意區分重寫(overwrite)
   通過這兩個方法,同一個方法的名稱的調用可以對應不同的方法實現

 1 <?php
 2 class MagicTest{
 3     //方法重載
 4     //這個方法的參數第一個就是調用的方法的名稱,
 5     //第二個參數是方法調用的參數組成的數組
 6     public function __call($name,$arguments) {
 7         echo " Calling ".$name." whith parameters:".implode(", ",$arguments);
 8     }
 9 }
10 
11 $obj = new MagicTest();
12 $obj->runTest("para1","para2");

 

輸出: Calling runTest whith parameters:para1, para2 

 MagicTest() 是不存在 runTest() 函數的,這時自動調用 __call() 函數

 

1 <?php
2 class MagicTest{
3     public static function __callStatic($name,$arguments) {
4         echo "Static Calling ".$name." whith parameters:".implode(", ",$arguments);
5     }
6 }
7 
8 $obj = new MagicTest();
9 MagicTest::runTest("para1","para2");

 

還有值得說的一點就是,兩個函數可以同時出現

 1 <?php
 2 class MagicTest{
 3     public function __call($name,$arguments) {
 4         echo " Calling ".$name." whith parameters:".implode(", ",$arguments)."<br/>";
 5     }
 6     public static function __callStatic($name,$arguments) {
 7         echo "Static Calling ".$name." whith parameters:".implode(", ",$arguments);
 8     }
 9 }
10 
11 $obj = new MagicTest();
12 $obj->runTest("para1","para2");
13 MagicTest::runTest("para1","para2");

輸出:

Calling runTest whith parameters:para1, para2
Static Calling runTest whith parameters:para1, para2

正常時候是不允許同時出現兩個相同的名稱的( runTest ),

但在面向對象的魔術方法中卻可以。


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()