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&nbsp;&nbsp;';
        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方法&nbsp;&nbsp;';
    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.'&nbsp;&nbsp;';
if(isset($ms->num2))
    echo'isset:OK';
else
    echo'isset:NO';



//系统函数empty访问类中不可直接访问的属性时,仅仅只调用了__empty魔术方法,在调用__get魔术方法
echo'<br><br>';
echo $ms->num2.'&nbsp;&nbsp;';
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基础魔术方法使用代码的主要内容,如果未能解决你的问题,请参考以下文章

单元测试魔术方法

PHP常用魔术方法(__call魔术方法:)

Python 魔术方法.

PHP常用魔术方法(__invoke魔术方法)

PHP常用魔术方法(__toString魔术方法)

python魔术方法之装饰器