您的位置:首页 > 移动开发 > Objective-C

object基础魔术方法使用代码

2016-06-25 23:40 567 查看
<!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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: