php Magic methods __call】的更多相关文章

<?php class Car{ protected $_color; protected $_model; public function __call($name,$arguments){ $first=isset($arguments[0]) ? $arguments[0] : null; switch ($name) { case 'getColor': return $this->_color; case 'setColor': $this->_color=$first; re…
Book Source:[https://rszalski.github.io/magicmethods/] magic methods: 名称前后有双下划线的方法 构造函数和初始化 初始化类实例时,__new__ 方法比__init__方法首先被调用 __del__:当被作为垃圾回收时调用的方法,可以用来做一些额外的清理工作.最好不要使用它来清理占用的资源(端口,文件流,链接),保持良好的代码习惯 自定义类操作函数的使用 两个对象的比较通常是比较这两个对象的引用 __eq__: 可用于 ==…
Pthon魔术方法(Magic Methods)-描述器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.描述器概述 1>.描述器定义 Python中,一个类实现了"__get__","__set__","__delete__"三个方法中的任何一个方法,就是描述器. 实现着三个中的某些方法,就支持了描述器协议: 仅实现了"__get__",就是非数据描述器,即non-data descriptor…
Pthon魔术方法(Magic Methods)-反射 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.反射概述 运行时,区别于编译时,指的时程序被加载到内存中执行的时候. 反射,reflection,指的时运行时获取类型定义信息. 一个对象能够再运行时,像照镜子一样,反射出其类型信息. 简单的说,再python这种,能够通过一个对象,找出其type,class,attribute或method的能力,称为反射或者自省. 具有反射能力的函数有type(),isinstanc…
Pthon魔术方法(Magic Methods)-上下文管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.上下文管理方法 __enter__: 进入与此对象相关的上下文.如果存在该方法,with语法会把该方法的返回值作为绑定到as子句中指定的变量上. __exit__: 退出此对象相关的上下文. 二.案例展示 1>.上下文管理对象 #!/usr/bin/env python #_*_conding:utf-8_*_ #@author :yinzhengjie #blog…
Pthon魔术方法(Magic Methods)-可调用对象 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.可调用对象方法 __call__: 类中定义一个该方法,实例就可以像函数一样调用. 二.案例展示 #!/usr/bin/env python #_*_conding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie class Point: def __init__(sel…
Pthon魔术方法(Magic Methods)-容器相关方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.容器相关方法汇总 __len__: 内建函数len(),返回对象的长度(>=0的整数),如果把对象当作容器类型看,就如同list或者dict. bool()函数调用的时候,如果没有__bool__()方法,则会看__len__()方法是否存在,存在返回非0为真. __iter__: 迭代容器时,调用,返回一个新的迭代器对象. __contains__: in成员运…
Pthon魔术方法(Magic Methods)-运算符重载 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Python运算符对应的魔术方法 1>.比较运算符 <: 对应__lt__ <=: 对应__le__ ==: 对应__eq__ >: 对应__gt__ >=: 对应__ge__ !=: 对应__ne__ 2>.算数运算符 +: 对应__add__ -: 对应__sub__ *: 对应__mul__ /: 对应__truediv__ %: 对…
Pthon魔术方法(Magic Methods)-bool 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.bool方法 __bool__: 内建函数bool(),或者对象放在逻辑表达式的位置,调用这个函数返回布尔值. 没有定义"__bool__()",就找"__len__()"返回长度,非0为真. 如果"__len__()"也没有定义,那么所有实例都返回真. __len__: 内建函数len(),调用这个函数返回当前数据类…
Pthon魔术方法(Magic Methods)-hash 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.hash方法 __hash__: 内建函数hash()调用的返回值,返回一个整数.如果定义这个方法该类的实例就可hash. __eq__: 对应"=="操作符,判断两个对象内容是否相等,返回bool值. 定义了这个方法,如果不提供"__hash__"方法,那么实例将不可hash了. "__hash__"方法只是返回一个…
Pthon魔术方法(Magic Methods)-可视化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.关于可视化的魔术方法简介 __str__: str()函数,format()函数,print()函数调用,需要返回对象的字符串表达式,即会默认调用该魔术方法. 如果没有定义该方法,就去调用"__repr__"方法返回字符串表达式,如果"__repr__"没有定义,就直接返回对象的内存地址信息. __repr__: 内建函数repr()对一个…
Pthon魔术方法(Magic Methods)-实例化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.实例化一个对象 __new__: 该方法需要返回一个值,如果该值不是cls的实例,则不会调用"__init__".该方法永远都是静态方法. 二.案例展示 #!/usr/bin/env python #_*_conding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengji…
描述符 : 将某种特殊类型的类的实例指派给另一个类的属性. 特殊类型为以下方法的1-3个 : __get__(self, instance, owner):用于访问属性,它返回属性的值 __set__(self, instance, value):将在属性分配操作中调用,不返回任何内容 __delete__(self, instance):控制删除操作,不返回任何内容 An example : design a property 123456789101112131415161718192021…
PHP中把以两个下划线__开头的方法称为魔术方法,这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __construct(),类的构造函数 __destruct(),类的析构函数 __call(),在对象中调用一个不可访问方法时调用 __callStatic(),用静态方式中调用一个不可访问方法时调用 __get(),获得一个类的成员变量时调用 __set(),设置一个类的成员变量时调用 __isset(),当对不可访问属性调用isset()或empty()时调用 __unset(),…
介绍 本指南是数月博客的总结.主题是魔术方法. 什么是魔术方法呢?它们是面向对象Python语言中的一切.它们是你可以自定义并添加“魔法”到类中的特殊方法.它们被双下划线环绕(比如__init__或__lt__).它们的文档也不像它所需要的那么齐备.Python的所有魔术方法都在Python文档的同一区域,但它们的使用分散,组织松散.而且文档的这部分区域中几乎没有一个示例(这很有可能是设计好的,因为在语法参考里它们都很详尽,但伴随的是枯燥的语法描述等等). 因此,为了解决Python文档中我认为…
魔法函数 python中以双下划线开始和结束的函数(不可自己定义)为魔法函数 调用类实例化的对象的方法时自动调用魔法函数(感觉不需要显示调用的函数都叫) 在自己定义的类中,可以实现之前的内置函数,比如下面比较元素sorted时用It函数(lt(self, other):判断self对象是否小于other对象:) class MyVector(object): def __init__(self, x, y): self.x = x self.y = y def __add__(self, oth…
https://pycoders-weekly-chinese.readthedocs.io/en/latest/issue6/a-guide-to-pythons-magic-methods.html (由于markdown语法问题,下面的所有的方法名字前后的--都被识别为加粗语法) 魔术方法 调用方式 解释 new(cls [,...]) instance = MyClass(arg1, arg2) new 在创建实例的时候被调用 init(self [,...]) instance = M…
__construct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state()和 __clone() 等方法在 PHP 中被称为"魔术方法"(Magic methods).在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能. PHP4中已经有了重载的语法来建立对于外…
在C++和java中,可以函数参数的个数或类型来进行重载.但php是弱类型的语言,无法采用传统的方法.若下面这样: class Person{ function fun1($a) { echo 'fun1 '.$a.'<br/>'; } function fun1($a,$b) { echo 'fun1 '.$a.' '.$b.' <br/>'; } }$t=new Person(); $t->fun1(1); 会报错: Fatal error: Cannot redecla…
<?php /* Magic method __set() and __get() 1.The definition of a magic function is provided by the programmer – meaning you, as the programmer, will actually write the definition. This is important to remember – PHP does not provide the definitions of…
http://blog.csdn.net/pipisorry/article/details/50708812 魔术方法是面向对象Python语言中的一切.它们是你可以自定义并添加"魔法"到类中的特殊方法.它们被双下划线环绕(比如__init__或__lt__). 在Python中,我们可以通过"魔术方法"使自定义的class变得强大.易用.例如当我们想定义一个可迭代的类对象的时候,就可以去实现"__iter__(self)"这个魔术方法: 构造…
这里只分析几个可能会常用到的魔法方法,像__new__这种不常用的,用来做元类初始化的或者是__init__这种初始化使用的 每个人都会用的就不介绍了. 其实每个魔法方法都是在对内建方法的重写,和做像装饰器一样的行为.理解这个道理 再尝试去理解每个细节装饰器会比较方便. 关于__str__和__repr__: 直接上例子: class Test(object): def __init__(self, world): self.world = world def __str__(self): re…
首先, __call是php语言自身就具有的一种语言features...,不是thinkphp的语言特征. 关于__call参考: http://love-love-l.blog.163.com/blog/static/21078304201042492356650/ php是一种若类型语言, 对变量类型没有做强制要求, 如false, 0, null, ""被认为是像等的, 所以在某些额 函数的最后,如果要进行类型区分, 要指明 参数 $strict = true __call是针…
原文:https://blog.csdn.net/pipisorry/article/details/50708812 版权声明:本文为博主皮皮http://blog.csdn.net/pipisorry原创文章,未经博主允许不得转载. https://blog.csdn.net/pipisorry/article/details/50708812http://blog.csdn.net/pipisorry/article/details/50708812 魔术方法是面向对象Python语言中的…
1. __call的用法 PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法.如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用. 例:__call <?php class foo { function __call($name,$arguments) { print("Did you call me? I'm $name!<br>"); print_r($arguments); print("&l…
1.PHP 中的所有函数和类都具有全局作用域,可以定义在一个函数之内而在之外调用,反之亦然. PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数. 当一个函数是有条件被定义时,必须在调用函数之前定义. 函数名是大小写无关的,不过在调用函数的时候,使用其在定义时相同的形式是个好习惯. 2.默认值必须是常量表达式,不能是诸如变量,类成员,或者函数调用等. 注意当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧:否则,函数将不会按照预期的情况工作.考虑下面的代码片断: <?php…
1.类与对象 对象:实际存在该类事物中每个实物的个体.$a =new User(); 实例化后的$a 引用:php的别名,两个不同的变量名字指向相同的内容 封装: 把对象的属性和方法组织在一个类(逻辑单元)里 继承:以原有的类为基础,创建一个新类,从而代码复用的目的: 多态:允许将子类类型的指针赋值给父类类型的指针. ------------------------------------- 2.自动加载对象: 自动加载通过定义特殊的__autoload函数,当引用没有在脚本中定义的类时会自动调…
Object 是一个基础类,实现了属性的功能,其基本内容如下: namespace yii\base; use Yii; /** * Object is the base class that implements the *property* feature. * Object是一个基础类,实现了属性的功能 * A property is defined by a getter method (e.g. `getLabel`), and/or a setter method (e.g. `se…
<?php /** * * @authors Your Name (you@example.org) * @date 2016-06-13 20:40:19 * @version $Id$ */ //属性重载 class Student{ private $name; public $age; public $xuehao; public function __construct($name,$age,$xuehao) { $this->name=$name; $this->age=$a…
重载 PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法.我们是通过 魔术方法(magic methods)来实现的. 当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用.本节后面将使用 "不可访问成员(inaccessible members)"和"不可访问方法(inaccessible methods)"来称呼这些未定义或不可见的类属性或方法. 所有的重载方法都必须被声明为publ…