zoukankan      html  css  js  c++  java
  • PHP中的魔术方法:__construct, __destruct , __call,__get, __set, __isset, __unset , __toString, __set,__clone and __autoload

    1、__get、__set

    这两个方法是为在类和他们的父类中没有声明的属性而设计的:

    __get( $property ) 当调用一个未定义的属性时访问此方法;

    __set( $property, $value ) 给一个未定义的属性赋值时调用;

    这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)。

    2、__isset、__unset

    __isset( $property ) 当在一个未定义的属性上调用isset()函数时调用此方法;

    __unset( $property ) 当在一个未定义的属性上调用unset()函数时调用此方法;

    与__get方法和__set方法相同,这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)。

    3、__call

    __call( $method, $arg_array ) 当调用一个未定义的方法时调用此方法。

    这里的未定义的方法包括没有权限访问的方法。

    4、__autoload

    __autoload 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。

    注意: 在 __autoload 函数中抛出的异常不能被 catch 语句块捕获并导致致命错误。

    5、__construct、__destruct

    __construct 构造方法,当一个对象创建时调用此方法,使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么。这样你在改变类的名称时,就不需要改变构造方法的名称。

    __destruct 析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法。默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源。析构函数允许你在使用一个对象之后执行任意代码来清除内存。当PHP决定你的脚本不再与对象相关时,析构函数将被调用。在一个函数的命名空间内,这会发生在函数return的时候。

    对于全局变量,这发生于脚本结束的时候。如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值。通常将变量赋值勤为NULL或者调用unset。

    6、__clone

    PHP5中的对象赋值是使用的引用赋值,如果想复制一个对象则需要使用clone方法,在调用此方法是对象会自动调用__clone魔术方法,如果在对象复制需要执行某些初始化操作,可以在__clone方法实现。

    7、__toString 

    __toString方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时,如果类没有实现此方法,则无法通过echo打印对象,否则会显示:

    Catchable fatal error: Object of class test could not be converted to string in

    此方法必须返回一个字符串

    在PHP 5.2.0之前,__toString方法只有结合使用echo() 或 print()时才能生效。PHP 5.2.0之后,则可以在任何字符串环境生效(例如通过printf(),使用%s修饰符),但 不能用于非字符串环境(如使用%d修饰符)。从PHP 5.2.0,如果将一个未定义__toString方法的对象 转换为字符串,会报出一个E_RECOVERABLE_ERROR错误。

  • 相关阅读:
    HDU5418.Victor and World(状压DP)
    POJ2686 Traveling by Stagecoach(状压DP)
    POJ3254Corn Fields(状压DP)
    HDU5407.CRB and Candies(数论)
    CodeForces 352D. Jeff and Furik
    CodeForces 352C. Jeff and Rounding(贪心)
    LightOj 1282 Leading and Trailing
    Ural 1057. Amount of Degrees(数位DP)
    HDU 2089 不要62 (数位DP)
    HDU5366 The mook jong (DP)
  • 原文地址:https://www.cnblogs.com/as1234as/p/5313858.html
Copyright © 2011-2022 走看看