php魔术方法与魔术变量、内置方法与内置变量的深入分析
程序员文章站
2023-02-23 22:14:58
php内置变量了:directory_separatordirectory_separator是一个返回跟操作系统相关的路径分隔符的php内置命令,在windows上返回/...
php内置变量了:directory_separator
directory_separator是一个返回跟操作系统相关的路径分隔符的php内置命令,在windows上返回/,而在linux或者类unix上反悔/,就是这么个区别,通常在定义包含文件路径或者上传保存目录的时候会用到。
php 把所有以 __ (两个下划线)开头的类方法当成魔术方法。所以你定义自己的类方法时,不要以 __ 为前缀。
1 、 __construct()
当实例化一个对象的时候,这个对象的构造方法将首先被调用;
我们知道 php5 对象模型和类名相同的函数是类的构造函数,那么如果同时定义构造函数和 __construc() 方法的话, php5 会默认调用 __contruct() 而不会调用同类名函数,所以 __contruct() 作为类的默认构造函数;
2 、 __destruct()
析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
3 、 __get(string $name)
当试图读取一个并不存在的属性时被调用;如果试图读取一个对象并不存在的属性的时候, php 就会给出错误的信息。如果在类里添加 __get 方法,并且我们可以用这个函数实现类似 java 中的反射的各种操作。
4 、 __set(string $name, mixed $value)
给未定义的变量赋值时将被调用
5 、 __call(string $name, array $arguments)
当调用一个不可访问方法(如未定义,或者不可见)时, __call() 会被调用。
__callstatic( string $name, array $arguments )
当在静态方法中调用一个不可访问方法(如未定义,或者不可见)时, __callstatic() 会被调用。
6 、 __tostring()
当打印一个对象的时候被调用,这个方法类似于 java 的 tostring 方法,当我们直接打印对象的时候回调这个函数。
7 、 __clone()
当对象被克隆时调用。
8 、 __sleep()
serialize() 函数会检查是否存在一个魔术方法 __sleep . 如果存在, __sleep() 方法会先被调用, 然后才执行序列化操作。这个功能可以用于清理对象,并返回一个包含对象中所有变量名称的数组。如果该方法不返回任何内容,则 null 被序列化,导致 一个 e_notice 错误。 __sleep 方法常用于提交未提交的数据,或类似的操作。同时,如果你有一些很大的对象,不需要保存,这个功能就很好用。
9 、 __wakeup()
与 __sleep() 相反, unserialize() 会检查是否存在一个 __wakeup 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象数据。 __wakeup 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。
10 、 __isset()
当对未定义的变量调用 isset() 或 empty() 时, __isset() 会被调用。
11 、 __unset()
unset 一个对象的属性时被调用。如: unset($c->name) 。
12 、 __set_state()
调用 var_export 时,被调用。用 __set_state 的返回值做为 var_export 的返回值。
13 、 __autoload()
实例化一个对象时,如果对应的类不存在,则该方法被调用。简单的说就是类的自动加载 ; 当你尝试使用一个 php 没有组织到的类 , 它会寻找一个 __autoload 的全局函数 . 如果存在这个函数 ,php 会用一个参数来调用它 , 参数即类的名称。
14 、 __invoke()
当尝试以调用函数的方式调用一个对象时, __invoke 方法会被自动调用。
魔术常量 :
__line__ 文件中的当前行号。
__file__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 php 4.0.2 起, __file__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
__dir__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__file__) 。除非是根目录,否则目录中名不包括末尾的斜杠。( php 5.3.0 中新增) =
__function__ 函数名称( php 4.3.0 新加)。自 php 5 起本常量返回该函数被定义时的名字(区分大小写)。在 php 4 中该值总是小写字母的。
__class__ 类的名称( php 4.3.0 新加)。自 php 5 起本常量返回该类被定义时的名字(区分大小写)。在 php 4 中该值总是小写字母的。
__method__ 类的方法名( php 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
__namespace__ 当前命名空间的名称(大小写敏感)。这个常量是在编译时定义的( php 5.3.0 新增)
directory_separator是一个返回跟操作系统相关的路径分隔符的php内置命令,在windows上返回/,而在linux或者类unix上反悔/,就是这么个区别,通常在定义包含文件路径或者上传保存目录的时候会用到。
php 把所有以 __ (两个下划线)开头的类方法当成魔术方法。所以你定义自己的类方法时,不要以 __ 为前缀。
1 、 __construct()
当实例化一个对象的时候,这个对象的构造方法将首先被调用;
我们知道 php5 对象模型和类名相同的函数是类的构造函数,那么如果同时定义构造函数和 __construc() 方法的话, php5 会默认调用 __contruct() 而不会调用同类名函数,所以 __contruct() 作为类的默认构造函数;
2 、 __destruct()
析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
3 、 __get(string $name)
当试图读取一个并不存在的属性时被调用;如果试图读取一个对象并不存在的属性的时候, php 就会给出错误的信息。如果在类里添加 __get 方法,并且我们可以用这个函数实现类似 java 中的反射的各种操作。
4 、 __set(string $name, mixed $value)
给未定义的变量赋值时将被调用
5 、 __call(string $name, array $arguments)
当调用一个不可访问方法(如未定义,或者不可见)时, __call() 会被调用。
__callstatic( string $name, array $arguments )
当在静态方法中调用一个不可访问方法(如未定义,或者不可见)时, __callstatic() 会被调用。
6 、 __tostring()
当打印一个对象的时候被调用,这个方法类似于 java 的 tostring 方法,当我们直接打印对象的时候回调这个函数。
7 、 __clone()
当对象被克隆时调用。
8 、 __sleep()
serialize() 函数会检查是否存在一个魔术方法 __sleep . 如果存在, __sleep() 方法会先被调用, 然后才执行序列化操作。这个功能可以用于清理对象,并返回一个包含对象中所有变量名称的数组。如果该方法不返回任何内容,则 null 被序列化,导致 一个 e_notice 错误。 __sleep 方法常用于提交未提交的数据,或类似的操作。同时,如果你有一些很大的对象,不需要保存,这个功能就很好用。
9 、 __wakeup()
与 __sleep() 相反, unserialize() 会检查是否存在一个 __wakeup 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象数据。 __wakeup 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。
10 、 __isset()
当对未定义的变量调用 isset() 或 empty() 时, __isset() 会被调用。
11 、 __unset()
unset 一个对象的属性时被调用。如: unset($c->name) 。
12 、 __set_state()
调用 var_export 时,被调用。用 __set_state 的返回值做为 var_export 的返回值。
13 、 __autoload()
实例化一个对象时,如果对应的类不存在,则该方法被调用。简单的说就是类的自动加载 ; 当你尝试使用一个 php 没有组织到的类 , 它会寻找一个 __autoload 的全局函数 . 如果存在这个函数 ,php 会用一个参数来调用它 , 参数即类的名称。
14 、 __invoke()
当尝试以调用函数的方式调用一个对象时, __invoke 方法会被自动调用。
魔术常量 :
__line__ 文件中的当前行号。
__file__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 php 4.0.2 起, __file__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
__dir__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__file__) 。除非是根目录,否则目录中名不包括末尾的斜杠。( php 5.3.0 中新增) =
__function__ 函数名称( php 4.3.0 新加)。自 php 5 起本常量返回该函数被定义时的名字(区分大小写)。在 php 4 中该值总是小写字母的。
__class__ 类的名称( php 4.3.0 新加)。自 php 5 起本常量返回该类被定义时的名字(区分大小写)。在 php 4 中该值总是小写字母的。
__method__ 类的方法名( php 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
__namespace__ 当前命名空间的名称(大小写敏感)。这个常量是在编译时定义的( php 5.3.0 新增)