PHP學習——26 PHP面向物件(物件的克隆clone與魔術方法__call、__callStatic)
阿新 • • 發佈:2018-11-27
一、物件的拷貝
<?php // 1.物件的拷貝 class Demo { public $name = 'Tonny'; } $demo1 = new Demo(); $demo2 = $demo1; // 引用賦值,實際上$demo1和$demo1指向同一個物件 $demo3 = clone $demo1;// 克隆賦值,相當於值傳遞賦值,將當前物件賦值到新的變數中 $demo1->name = 'Peter'; echo '引用賦值'.$demo1->name.'--'.$demo2->name; // 引用賦值Peter--Peter echo '<hr>'; echo '克隆賦值'.$demo1->name.'--'.$demo3->name; // 克隆賦值Peter--Tonny echo '<hr>'; echo '克隆物件的類是:'.get_class($demo3); // 克隆物件的類是:Demo echo '<hr>'; // 2.陣列的拷貝,與js不同,php中的陣列是值傳遞賦值 $arr1 = ['胡歌','張一山']; $arr2 = $arr1; // 值傳遞賦值 $arr2[0] = '胡一刀'; print_r($arr1); // Array ( [0] => 胡歌 [1] => 張一山 ) echo '<hr>'; print_r($arr2); // Array ( [0] => 胡一刀 [1] => 張一山 ) ?>
二、呼叫不存在的方法(靜態方法)時用到的__call(__callStatic)
<?php class Demo { // 1.當我們呼叫一個不存在的方法時會自動呼叫__call() public function __call($method,$args)//第一個引數是方法名,第二個引數是方法的引數陣列 { $var = ''; foreach($args as $value){ $var .= ','.$value; // .= 字串運算子 } $var = substr($var,1); return '方法'.$method.'('.$var.')不存在'; } // 2.當我們呼叫一個不存在的靜態方法時會自動呼叫__callStatic() // 靜態的魔術方法狀態一定是static public static function __callStatic($method,$args) { $var = ''; foreach($args as $value){ $var .= ','.$value; } $var = substr($var,1); return '靜態方法'.$method.'('.$var.')不存在'; } } echo (new Demo)->show('Tom',24,2000); // 方法show(Tom,24,2000)不存在 echo '<hr>'; echo Demo::display(100,200,400); // 靜態方法display(100,200,400)不存在 ?>