PHP魔术方法的使用

Object类

<?php
/**
 * Created by PhpStorm.
 * User: dragon
 * Date: 2017/5/4
 * Time: 14:38
 */

namespace core\lib;


class Object
{
    protected $array = [];

    public function __set($name, $value)
    {
        // TODO: Implement __set() method.
        var_dump(__METHOD__);
        $this->array[$name] = $value;

    }

    public function __get($name)
    {
        // TODO: Implement __get() method.
        var_dump(__METHOD__);
        return $this->array[$name];
    }

    public function __call($name, $arguments)
    {
        // TODO: Implement __call() method.
        var_dump($name,$arguments);
        return "magic function\n";
    }

    static function __callStatic($name, $arguments)
    {
        // TODO: Implement __callStatic() method.
        var_dump($name,$arguments);
        return "magic static function\n";
    }

    public function __toString()
    {
        // TODO: Implement __toString() method.
        return __CLASS__;

    }

    public function __invoke($param)
    {
        // TODO: Implement __invoke() method.
        var_dump($param);
        return "invoke";
    }
}

Object类中包含_set()和_get()方法后,就可以访问到未定义的属性

include CORE.'/z_frame.php';
spl_autoload_register('\core\z_frame::load');

$obj = new \core\lib\Object();

$obj->title = 'zdc';
echo $obj->title;
操作未定义的属性title

Object类中包含__call()方法后,可以调用未定义的方法

include CORE.'/z_frame.php';
spl_autoload_register('\core\z_frame::load');

$obj = new \core\lib\Object();

echo $obj->test("zdc",123);
调用未定义的函数test

Object类中包含__callStatic()方法后,可以调用未定义的静态方法

include CORE.'/z_frame.php';
spl_autoload_register('\core\z_frame::load');

$obj = new \core\lib\Object();

echo \core\lib\Object::test("zdc",123);
调用未定义的静态函数test

用__toString()方法可将一个类对象当字符串返回

include CORE.'/z_frame.php';
spl_autoload_register('\core\z_frame::load');

$obj = new \core\lib\Object();

echo $obj;
将一个类对象当字符串返回

在Object类中定义__invoke()函数可以将对象当函数使用

include CORE.'/z_frame.php';
spl_autoload_register('\core\z_frame::load');

$obj = new \core\lib\Object();

echo $obj("zdc");
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,568评论 0 11
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,894评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,292评论 19 139
  • 在动笔之前,我哭了一场,为朋友的心伤,为自己的软弱。 一直以来,我都作为身边姐妹的心灵鸡汤,像小太阳一样暖暖的照着...
    佳佳吴阅读 3,599评论 13 5
  • 因为在阅读了第一章后,让我深深的了解了内需的重要性,在第二周虽然按计划的看完的阅读计划,但却不知如何写阅读输出,为...
    阅云阁阅读 2,435评论 0 1