您的位置:澳门402永利com > 计算机 网络 > 3新扩张魔术点子__invoke概述

3新扩张魔术点子__invoke概述

发布时间:2019-09-23 20:45编辑:计算机 网络浏览(131)

    PHP自从5.3版来讲就新增添了叁个叫作__invoke的魔术点子,使用该办法就足以在创设实例后,直接调用对象。如下示例所示:

    class testClass
    {
    public function __invoke
    {
    print "hello world";
    }
    }
    $n = new testClass;
    $n();
    

    实践结果为:

    hello world。
    

    php官方示比方下:

    class CallableClass
    {
    public function __invoke($x)
    {
    var_dump($x);
    }
    }
    $obj = new CallableClass;
    $obj(5);
    var_dump(is_callable($obj));
    

    附:PHP别的魔术点子详解:

    php中的类就足以行使魔术点子了。其规定以七个下划线(__)伊始的措施都封存为魔术点子,所以提议大家函数名最棒不用__始于,除非是为重视载已有的魔术点子。

    The function names __construct, __destruct, __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __invoke, __set_state and__clone are magical in PHP classes. You cannot have functions with these names in any of your classes unless you want the magic functionality associated with them.

    一般来讲那四个主意是为在类和她俩的父类中绝非注解的属性而安顿的。
    __get($property)当调用三个未定义的性质时,此方法会被触发,传递的参数是被访谈的属性名。
    __set($property,$value)给贰个未定义的属性赋值时,此办法会被触发,传递的参数是被安装的属性名和值。
    那边的未有注脚富含当使用对象调用时,访谈调节为proteced,private的属性(即未有权限访谈的性质)。
    与__get方法和__set方法一样,这里的尚未申明富含当使用对象调用时,访谈调整为proteced,private的属性(即未有权限访谈的性质)。

    那边的未定义的不二秘诀包罗未有权限访谈的方法;尽管措施不设有就去父类中找那些格局,假设父类中也海市蜃楼就去调用本类的__call()方法,若是本类中不设有__call()方法就去找父类中的__call()方法。

    __autoload函数,它会在计算利用未有被定义的类时自动调用。通过调用此函数,脚本引擎在php出错战败前有了最终贰个火候加载所需的类。

    注意:在__autoload函数中抛出的极度不能够被catch语句块捕获并致使致命错误,所以应该在函数自己做捕获。

    __construct构造方法,当三个对象创制时调用此格局,相对于php4使用此方法的利润是:能够使构造方法有贰个旷世的名目,无论它所在的类的名号是什么.那样您在转移类的称呼时,就无需转移构造方法的称谓。

    __destruct析构方法,php就要指标被灭绝前(即从内部存款和储蓄器中排除前)调用那么些主意。暗中同意情状下,php仅仅释放对象属性所占有的内部存款和储蓄器并销毁对象相关的能源,析构函数允许你在使用五个对象之后实行任意代码来裁撤内部存款和储蓄器。当php决定你的本子不再与指标相关时,析构函数将被调用。

    在三个函数的命名空间内,那会时有爆发在函数return的时候。对于全局变量,那产生于脚本结束的时候。要是你想了解地销毁叁个指标,你能够给指向该对象的变量分配任何另外值.平日将变量赋值为null或然调用unset。

    php5中的对象赋值是应用的援用赋值,假如想复制二个对象则供给运用clone方法,在调用此措施是指标会活动调用__clone魔术方法,假若在对象复制须要进行有些开端化操作,可以在__clone方法完毕。

    __tostring方法在将叁个对象转化成字符串时自动调用,举个例子利用echo打字与印刷对象时。

    在php5.2.0之前,__tostring方法只有结合使用echo()或print()时才干奏效。php5.2.0之后,则能够在别的字符串情状生效(举个例子通过printf(),使用%s修饰符),但无法用来非字符串景况(如使用%d修饰符)。从php5.2.0,要是将三个未定义__tostring方法的对象转变为字符串,会报出多个e_recoverable_error错误。

    __wakeup反串行化的时候调用

    serialize()检查类中是或不是有魔术名称__sleep的函数。若是那样,该函数就要其他连串化在此以前运维。它可避防去对象并理应回到三个包涵有该目的中应被种类化的持有变量名的数组。

    使用__sleep的指标是目的恐怕装有的其余数据库连接,提交等待中的数据或开展类似的消除义务。其余,假若有不行大的指标而并没有供给完全储存下来时此函数也很有用。

    PHP相反地,unserialize()检查有着魔术名称__wakeup的函数的存在。假使存在,此函数能够重新营造对象可能持有的别的国资本源。使用__wakeup的目的是重新建立在体系化中大概有失的任何数据库连接以及管理其余重新最早化的天职。
    当尝试以调用函数的方法调用多少个对象时,__invoke方法会被自动调用。

    它的行事方式临近于__call()魔术点子,__callstatic()是为了管理静态方法调用。

    php确实压实了对__callstatic()方法的概念;它必需是公共的,并且必得被声称为静态的。同样,__call()魔术点子必需被定义为公共的,全部其余魔术点子都不能不这么。

    本文由澳门402永利com发布于计算机 网络,转载请注明出处:3新扩张魔术点子__invoke概述

    关键词: