PHP魔法方法的使用

1.__get / __set

当类没有要存取的属性时,就调用这两个函数

$obj = new IMooc\Object();
$obj->title = "hello";
echo $obj->title;

<?phpnamespace IMooc;class Object{    protected $array = array();    function __set($key, $value)    {        var_dump(__METHOD__);        $this->array[$key] = $value;    }    function __get($key)    {        var_dump(__METHOD__);        return $this->array[$key];    }}

2.__call / __callStatic

当类没有所调用的函数时,就调用这两个函数

$obj = new IMooc\Object();
echo $obj->test("hello", 123);

echo IMooc\Object::test("world", 1233);


<?phpnamespace IMooc;class Object{    function __call($func, $param)    {        var_dump($func, $param);        return "magic function\n";    }    static function __callStatic($func, $param)    {        var_dump($func, $param);        return "magic static function\n";    }}

3.__toString

当对象当做字符串使用时自动调用该函数

$obj = new IMooc\Object();
echo $obj;

<?phpnamespace IMooc;

class Object{    function __toString()    {        return "toString";    }}

4.__invoke

当对象当做函数使用时自动调用该函数

$obj = new IMooc\Object();
echo $obj("test1");

<?phpnamespace IMooc;

class Object{    function __invoke($param)    {        var_dump($param);        return "invoke";    }}

来自为知笔记(Wiz)

时间: 2024-11-03 05:43:32

PHP魔法方法的使用的相关文章

Python基础教程(第九章 魔法方法、属性和迭代器)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5437223.html______ Created on Marlowes 在Python中,有的名称会在前面和后面都加上两个下划线,这种写法很特别.前面几章中已经出现过一些这样的名称(如__future__),这种拼写表示名字有特殊含义,所以绝不要在自己的程序中使用这样的名字.在Python中,由这些名字组成的集合所包含的方法称

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第09章 | 魔法方法、属性和迭代器

这一章,有点抽象,看着有点蛋疼! 双下划线__future__或单下划线有特殊含义,在Python中,这些名字的集合称为魔法方法:最重要的是__init__和一些处理访问对象的方法,这些方法允许你创建自己的序列或者是映射. ------ 准备工作: 将__metaclass__=type放在模块的最开始位置,以确保类时最新式的.考虑下面两个类 class NewStyle(object): more_code_here class OldStyle: more_code_here 如果文件以__

python魔法方法详解

文章来源:http://blog.csdn.net/koko66/article/details/42709279 据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切. 他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的. Python 的魔术方法非常强大,然而随之而来的则是责任.了解正确的方法去使

python魔法方法-反射运算和增量运算

反射运算 什么是反射运算符,其实就是反转了两个对象,下面先看一个普通运行符的实现: class Foo(object): def __init__(self, x): self.x = x def __add__(self, other): return 'Foo:%s + %s' % (self.x, other.x) class Boo(object): def __init__(self, x): self.x = x def __add__(self, other): return 'B

Python类属性访问的魔法方法

Python类属性访问的魔法方法: 1. __getattr__(self, name)- 定义当用户试图获取一个不存在的属性时的行为 2. __getattribute__(self, name)- 定义当该类的属性被访问时的行为 注意:当__getattr__与__getattribute__同时重写时,访问属性时,优先调用__getattribute__,只有当被访问的属性不存在时才触发__getattr__ 3. __setattr__(self, name, value)- 定义当一个

《Python基础教程》 读书笔记 第九章 魔法方法、属性和迭代器(上)

构造方法 在Python中创建一个构造方法很容易.只要把init方法的名字从简单的init修改为魔法版本__init__即可: >>> class FooBar: ...     def __init__(self): ...         self.somevar=42 ... >>> f=FooBar() >>> f.somevar 42 给构造方法传几个参数 >>> class FooBar: ...     def __in

magic method细解python一直让我疑惑的几个常用魔法方法(上)

这里只分析几个可能会常用到的魔法方法,像__new__这种不常用的,用来做元类初始化的或者是__init__这种初始化使用的 每个人都会用的就不介绍了. 其实每个魔法方法都是在对内建方法的重写,和做像装饰器一样的行为.理解这个道理 再尝试去理解每个细节装饰器会比较方便. 关于__str__和__repr__: 直接上例子: class Test(object): def __init__(self, world): self.world = world def __str__(self): re

python魔法方法-比较相关

在python2.x的版本中,支持不同类型的比较,其比较原则如下: 内置类型: 1.同一类型: 1.1)数字类型:包含int.float.long.complex.bool(bool类型是int的子类,且True=1, False=0).就按照数字的大小进行比较,例如:   1.2)非数字类型:1.2.1)如果类型中定义了如__cmp__.__gt__等魔法方法,就按照其魔法方法的返回值进行比较,具体如何就是这篇文章接下来要讨论的内容.  1.2.2)如果没有定义上述的魔法方法,就按照 id 函

知识点:Python 魔法方法详解

据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切. 他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的. Python 的魔术方法非常强大,然而随之而来的则是责任.了解正确的方法去使用非常重要! 魔法方法 含义 基本的魔法方法 __new__(cls[, ...]) 1. __new__ 是在一个

python魔法方法-属性转换和类的表示

类型转换魔法 类型转换魔法其实就是实现了str.int等工厂函数的结果,通常这些函数还有类型转换的功能,下面是一些相关的魔法方法: __int__(self) 转换成整型,对应int函数. __long__(self) 转换成长整型,对应long函数. __float__(self) 转换成浮点型,对应float函数. __complex__(self) 转换成 复数型,对应complex函数. __oct__(self) 转换成八进制,对应oct函数. __hex__(self) 转换成十六进