版权声明:本文为博主原创文章,仅供学习交流,未经博主允许不得转载。 https://blog.csdn.net/zjy_android_blog/article/details/83448638
一、对象的拷贝
<?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)不存在
?>