文档章节

php 魔术方法

别人说我名字很长
 别人说我名字很长
发布于 2016/02/14 10:17
字数 348
阅读 37
收藏 1
//实例化对象时,会调用对象的__construct方法
$obj = new Object();
//给对象不存在的属性赋值时,会调用对象的__set方法
$obj->title = "hello";
//使用对象不存在的属性时,会调用对象的__get方法
echo $obj->title;
//调用对象不存在的方法时,会调用对象的__call方法
$obj->test("hello",123,567);
//调用不存在的类静态方法时,会调用类的__callStatic方法
Object::staticMethod("static","not found method");
//直接输出对象时,会调用对象的__toString方法
echo $obj;
//将一个对象当作函数一样使用时,会调用对象的__invoke方法
echo $obj("test");
//克隆对象时,会调用对象的__clone方法
$obj2 = clone $obj;
//判断对象属性是否存在时,会调用对象的__isset方法
var_dump(isset($obj->aaa));
//销毁对象属性时,会调用对象的__unset方法
unset($obj->aaa);


class Object{

    protected $array = array();

    function __construct()
    {
        echo __METHOD__."你正在实例化对象<br>";
    }

    function __set($name, $value)
    {
        $this->array[$name]=$value;
    }

    function __get($name)
    {
        return $this->array[$name];
    }

    function __call($name, $arguments)
    {
        var_dump($name,$arguments);
        return "magic function\n";
    }

    static function __callStatic($name, $arguments)
    {
        var_dump($name,$arguments);
        return "magic static function";
    }

    function __toString()
    {
        return __CLASS__.'<br>';
    }

    function __invoke($arguments)
    {
        var_dump($arguments);
        return __METHOD__.'<br>';
    }

    function __clone()
    {
        echo __METHOD__."你正在克隆对象<br>";
    }

    function __isset($name)
    {
        echo __METHOD__."你想判断有没有属性".$name."<br>";
        return 1;
    }

    function __unset($name)
    {
        echo __METHOD__."你想删除属性".$name."<br>";
    }


    function __destruct()
    {
        echo __METHOD__."你正在注销对象<br>";
    }



}



© 著作权归作者所有

别人说我名字很长
粉丝 58
博文 265
码字总数 113918
作品 0
济南
程序员
私信 提问
加载中

评论(0)

分解:PHP 魔术方法在 Laravel 中的应用

原文链接:learnku.com/laravel/t/4… 讨论请前往专业的 Laravel 开发者论坛:learnku.com/Laravel Laravel将PHP应用到了一个全新的水平,为您打造下一个项目提供了出色的开发体验(DX)。因...

Summer__
02/28
0
0
PHP中用下划线开头的变量含义

命名的规则 加一个为私有的 加两个一般都是系统默认的,系统预定义的,即所谓: “魔术方法”与“魔术常量” PHP起止为双下划线的常量即为“魔术常量”: LINE文件中的当前行号。 FILE文件的...

linuxjd
2014/09/13
3.3K
1
Laravel5.2之PHP重载(overloading)

说明:本文主要讲述PHP中重载概念,由于Laravel框架中经常使用这块知识点,并且PHP的重载概念又与其他OOP语言如JAVA中重载概念不一样,故复习并记录相关知识点。同时,作者会将开发过程中的一...

botkenni
2016/10/24
16
0
PHP 预定义变量、魔术常量和魔术方法

PHP 预定义了一些变量、常量、方法,使用起来很方便,例如直接使用 下面分别详细介绍一下 PHP 的预定义变量、魔术常量和魔术方法 预定义变量 超全局变量: 超全局变量是在全部作用域中始终可...

Ryan_zheng
03/25
0
0
php魔术常量、超全局变量、魔术方法

一、魔术常量(魔术变量) 概念:所谓的魔术常量就是PHP预定义的一些常量,这些常量会随着所在的位置而变化。 1、LINE 获取文件中的当前行号。 2、FILE 获取文件的完整路径和文件名。 3、DIR...

osc_tg4e471h
2019/04/01
1
0

没有更多内容

加载失败,请刷新页面

加载更多

web测试与app测试的区别

web测试与app测试的区别 首先从系统架构来看的话: web项目,一般都是b/s架构,基于浏览器的,而app则是c/s的,必须要有客户端。那么在系统测试测试的时候就会产生区别了。 web测试只要更新了...

osc_qo89by3k
31分钟前
16
0
【mysql 读写分离】10分钟了解读写分离的作用

1、什么是读写分离 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集...

努力的学渣
32分钟前
27
0
Sphinx和rst在科研笔记和学术博客中的高效用法

什么是RST? reStructuredText 是扩展名为 .rst 的纯文本文件,含义为"重新构建的文本",也被简称为:RST 或 reST; 是 Python 编程语言的 Docutils 项目的一部分,Python Doc-SIG (Documen...

osc_6b3uvobr
33分钟前
17
0
MySQL 的 crash-safe 原理解析

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/5i9wmJs4_Er7RaYfNnETyA 作者:xieweipeng MySQL作为当下最流行的开源关系型数据库,有一个很关键和基本的能力,就...

vivo互联网技术
33分钟前
23
0
Org Mode - 年轻人的第一堂时间管理课程

忙成狗,闲成猪。 上半年我的状态就是如此,为了做出改变我找了很多的任务管理工具,比如奇妙清单、滴答清单(现在我还在用)等等,但是依然没有满足我的需求。作为一名精力旺盛的开发仔,我...

osc_smzoc82r
33分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部