PHP学习——26 PHP面向对象(对象的克隆clone与魔术方法__call、__callStatic)

版权声明:本文为博主原创文章,仅供学习交流,未经博主允许不得转载。 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)不存在

?>

猜你喜欢

转载自blog.csdn.net/zjy_android_blog/article/details/83448638