object基础魔术方法使用代码
Posted tqzuy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了object基础魔术方法使用代码相关的知识,希望对你有一定的参考价值。
<!DOCTYPE html><html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php
class MoShu
public $num1;
private $num2;
private $age;
//__set方法没有定义相当于不存在
//__set方法格式比较固定,必须工有的public,参数必须有两个
//第一个参数:属性名称(字符串格式);第二个参数:属性的值
public function __set($name,$value)
// echo'<br>无法直接调用的属性:'.$name;
//property_exists判断类当中是否有某个名称属性存在
if(property_exists($this,$name))
$this->$name=$value;
else
echo'没有对应的属性:'.$name.'<br>';
//__get方法格式也是固定的,必须有一个参数
//需要提取值得参数名称,字符串格式
public function __get($name)
echo'调用了魔术方法__get ';
if(property_exists($this,$name))
return $this->$name;
else
echo'没有对应的属性:'.$name.'<br>';
return null;
private function myself()
echo'火柴人访问的方法<br>';
private function mytest($num)
echo'<br>接收的数据'.$num .'<br>';
//__call 如果没有定义则没有
//第一个参数:调用的方法名称(字符串),第二个参数:该方法的参数(数组格式),需要自己拆分
public function __call($name,$canshu)
// $this->$name($canshu);
switch(count($canshu))
case 0:call_user_func(array($this,$name));
break;
case 1:call_user_func(array($this,$name),$canshu[0]);
break;
case 2:call_user_func(array($this,$name),$canshu[0],$canshu[1]);
break;
public function __isset($value)
echo'调用了__isset方法 ';
return isset($value);
//__toString函数是将对象手动转换为字符串格式的内容,以便操作或者输出
//该函数要求必须有一个返回值,且格式必须是字符串
public function __toString()
return "数字:".$this->num1.',年龄:'.$this->num2;
//把对象用函数的方式进行书写调用时,自动访问__invoke函数
public function __invoke($canshu="")
return "接受的参数:".$canshu;
$ms=new MoShu();
$ms->age=30;
$ms->num2=20;
$ms->num1=10;
$ms->num3=40;
var_dump($ms);
echo $ms->num2;
echo'<br><br>';
echo$ms->num3;
//系统函数isset访问类中不可直接访问的属性时,仅仅只调用了__isset魔术方法
echo'<br><br>';
$ms->myself();
$ms->mytest(100);
echo'<br><br>';
echo $ms->num2.' ';
if(isset($ms->num2))
echo'isset:OK';
else
echo'isset:NO';
//系统函数empty访问类中不可直接访问的属性时,仅仅只调用了__empty魔术方法,在调用__get魔术方法
echo'<br><br>';
echo $ms->num2.' ';
if(empty($ms->num2))
echo'empty:OK';
else
echo'empty:NO';
echo'<br><br>';echo'<br><br>';
echo $ms;
echo'<br><br>';
echo $ms(100);
echo'<br><br>';
var_dump($ms);
$clms=clone $ms;
var_dump($clms);
echo'<br><br>';
$ms->num1=100;
var_dump($ms);
var_dump($clms);
echo'<br><br>';
class Test
if($clms instanceof MoShu)
echo 'OK';
else
echo'NO';
echo'<br><br>';
if($clms instanceof Test)
echo 'OK';
else
echo'NO';
?>
</body>
</html>
以上是关于object基础魔术方法使用代码的主要内容,如果未能解决你的问题,请参考以下文章