主旨:PHP中的魔术方法总结 __construct, __destruct , __call, __callStatic, __get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload
- __construct __construct
__construct 构造方法,当一个对象创建时调用此方法,使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么.这样你在改变类的名称时,就不需要改变构造方法的名称
__destruct 析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法
默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源.
析构函数允许你在使用一个对象之后执行任意代码来清除内存.
当PHP决定你的脚本不再与对象相关时,析构函数将被调用.
在一个函数的命名空间内,这会发生在函数return的时候.
对于全局变量,这发生于脚本结束的时候.如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值.通常将变量赋值勤为NULL或者调用unset.
- __get、__set
这两个方法是为在类和他们的父类中没有声明的属性而设计的
__get( $property ) 当调用一个未定义的属性时访问此方法
__set( $property, $value ) 给一个未定义的属性赋值时调用
这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)
- __isset、__unset
__isset( $property ) 当在一个未定义的属性上调用isset()函数时调用此方法
__unset( $property ) 当在一个未定义的属性上调用unset()函数时调用此方法
与__get方法和__set方法相同,这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)
- __call __callStatic
__callStatic
它的工作方式类似于 __call() 魔术方法,__callStatic() 是为了处理静态方法调用,
PHP5.3.0以上版本有效
PHP 确实加强了对 __callStatic() 方法的定义;它必须是公共的,并且必须被声明为静态的。同样,__call() 魔术方法必须被定义为公共的,所有其他魔术方法都必须如此。
__call
__call( $method, $arg_array ) 当调用一个未定义的方法是调用此访求
这里的未定义的方法包括没有权限访问的方法
- __autoload
__autoload 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。
注意: 在 __autoload 函数中抛出的异常不能被 catch 语句块捕获并导致致命错误。
- __clone
__clone
PHP5中的对象赋值是使用的引用赋值,如果想复制一个对象则需要使用clone方法,在调用此方法是对象会自动调用__clone魔术方法
如果在对象复制需要执行某些初始化操作,可以在__clone方法实现
- __sleep、__wakeup
__sleep 串行化的时候用
__wakeup 反串行化的时候调用
serialize() 检查类中是否有魔术名称 __sleep 的函数。如果这样,该函数将在任何序列化之前运行。它可以清除对象并应该返回一个包含有该对象中应被序列化的所有变量名的数组。
使用 __sleep 的目的是关闭对象可能具有的任何数据库连接,提交等待中的数据或进行类似的清除任务。此外,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。
相反地,unserialize() 检查具有魔术名称 __wakeup 的函数的存在。如果存在,此函数可以重建对象可能具有的任何资源。
使用 __wakeup 的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。
- __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错误。
分享到:
相关推荐
- PHP魔术方法:__get、__set、__call等的理解和使用场景。 3. **数组操作**: - 创建和遍历数组:了解不同类型的数组(索引数组、关联数组)及遍历方式。 - 数组函数:array_push、array_pop、array_merge、...
#### 七、PHP魔术方法与魔术变量 1. **魔术方法**:PHP中提供了一些特殊的方法,它们的名称以两个下划线(`__`)开头,这些方法可以在特定的情况下自动调用。 - **`__construct()`**:构造函数,在对象创建时自动...
这部分内容还可能涵盖命名空间、魔术方法、反射、以及PHP的内置对象模型如PDO用于数据库操作,以及Session和Cookie的使用,这些都是PHP开发中不可或缺的部分。 然后,《PHP100教程96~112讲.docx》可能会讨论更高级...
【PHP与MySQL面试知识点】 1. PHP基础: - PHP语法:理解变量声明、数据类型(字符串、...以上是基于"PHP mysql 面试题集锦"的主题,涵盖的常见知识点。理解和掌握这些内容将有助于应对PHP和MySQL相关的面试挑战。
【PHP经典面试题全集】是一份集合了多个大型企业PHP招聘面试中常见的问题和解答的资源,旨在帮助应聘者全面准备PHP相关的技术面试。这份资料涵盖了PHP的基础知识到高级应用,是提升PHP技能和应对面试的理想参考资料...
PHP作为一款广泛应用的服务器端脚本语言,对于初学者来说,掌握基础并了解一些常见的面试题对于求职至关重要。以下是对题目的一一解析: 1. PHP 知识 - `echo 8%(-2)`:在PHP中,取模运算符 `%` 返回除法的余数。...
### 腾讯PHP面试题解析 #### 一、正则表达式的对比 **题目描述:** 对比 POSIX 风格和 Perl 兼容的正则表达式(PCRE)中的主要函数。 1. **eregi vs preg_match** - **eregi** (已废弃):用于检查字符串是否与...
对于PHP开发者来说,掌握常见面试题不仅可以提升自己的技能,还能在求职过程中展现出扎实的基础和专业素养。以下是一些经典PHP面试题及其解析: 1. **PHP的数据类型有哪些?** PHP支持多种数据类型,包括整型(int...
PHP工程面试题 在 PHP 中,单例模式和工厂模式是两个常用的设计模式。单例模式确保类只有一个实例,并提供一个全局访问点,而工厂模式则提供了一种创建对象的方法,而不需要关心对象的实现细节。 在给定的代码中,...
- 对象操作:实例化、属性和方法的访问、魔术方法的使用(__get, __set, __call等)。 - 接口与抽象类:理解接口的作用以及抽象类和接口的区别。 4. 错误与异常处理: - 错误报告:理解错误级别(E_ERROR, E_...
这份"PHP程序员面试题A类含答案.zip"压缩包文件是为那些准备参加PHP程序员面试的人精心准备的资料,旨在帮助他们更好地理解和掌握PHP的核心概念、语法以及常见问题。 文档"笔试题-基础题.docx"涵盖了PHP的基础知识...
以下是一些PHP面试中常见的问题和相关知识领域,这些内容可能会出现在"韩顺平PHP面试题大全(整理汇总)"、"老刘面试题"以及"就业用夹"等资料中。 1. **PHP基础** - 变量:理解PHP变量的声明、类型(如int, string, ...
这份"最全的PHP面试题总汇"是为准备PHP面试的开发者精心编纂的资源,涵盖了各种PHP核心概念、函数用法、框架应用、最佳实践以及常见问题解答。 一、PHP基础 1. PHP的全称是什么?它是什么时候创建的? 2. 描述PHP的...
- PHP魔术方法:如`__construct`, `__destruct`, `__get`, `__set`等,它们在特定情况下自动调用。 3. **字符串处理** - 字符串操作:包括连接(.操作符)、截取(substr)、查找(strpos)和替换(str_replace)...
- PHP魔术方法:如__construct、__destruct、__get、__set等。 4. **错误与异常处理**: - 错误报告:了解error_reporting()和ini_set()的用法。 - 异常处理:try-catch-finally语句块的使用,自定义异常类。 5...
下面是一些常见的PHP面试题及其简要答案,这些题目涵盖了基础语法、函数使用、面向对象编程、数据库交互以及安全实践等方面。 1. **PHP是什么?** PHP(Hypertext Preprocessor)是一种开源的服务器端脚本语言,...
10. **PHP魔术方法**:如__construct()构造函数,__destruct()析构函数,__get()和__set()用于访问私有属性,__call()处理未定义的方法调用。 11. **session和cookie**:了解它们在用户会话管理中的作用,如何设置...
以上知识点涵盖了HTTP/HTTPS协议的区别、网页加载优化方法、PHP中常见的GET/POST方法以及session/cookie的使用场景,还包括了PHP语言的一些基本特性介绍,以及如何优化MySQL数据库的性能。这些内容对于准备PHP面试的...
8. **PHP魔术方法**:如__construct, __destruct, __get, __set等,它们在特定情况下自动调用,对于理解对象行为至关重要。 9. **PHP内置函数和扩展**:例如GD库用于图像处理,mysqli或PDO用于数据库操作,cURL用于...