文章出處
文章列表
__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 ),
但在面向對象的魔術方法中卻可以。
文章列表
全站熱搜