《PHP精粹:编写高效PHP代码》——1.8节更多神奇的方法

简介:

本节书摘来自华章社区《PHP精粹:编写高效PHP代码》一书中的第1章,第1.8节更多神奇的方法,作者:(美)  Davey Shafik,更多章节内容可以访问云栖社区“华章社区”公众号查看

1.8 更多神奇的方法
本章已介绍了一些神奇方法。在表1.1中快速回顾一下这些方法。


9d458473a7f93a54eceef4a2547c13a0183685c3

当在一个类中定义这些函数时,可以定义当这些事件发生时会引发什么。没有这些函数的话,类将显现为默认行为,而这些常常都是需要的。PHP另外还有一些神奇方法,在本节中我们将看到一些使用最频繁的方法。

1.8.1 使用__call()和__callStatic()方法
在关于访问修饰符的内容里,我们看到,对于__get()和__set()方法而言,__call()方法是一个天生的搭档。使用__get()和__set()方法处理不是真实存在的属性,__call()方法的作用与它们相同。当调用一个没有在类中声明的方法时,可以调用__call()方法代替声明一个方法。
我们已经使用过Courier类的ship()方法,但是如果我们想调用sendParcel()来实现相同的功能呢?当使用一些过时的系统时,通常依次更换现存系统的一部分。可以修改Courier类定义使其包含sendParcel()方法,还可以使用__call()方法,比如像这样:


bb63b1280f25f34d38774e155db4648297c1a0f4

所有这些魔法一定留下了机会让人们创建出代码精粹,不是任何普通人都能使用它们的!当使用__call()方法替代声明一个方法时,会让IDE自动生成方法名的功能失效。当检查一个类中是否存在一个函数时,该方法将无法显示,在调试时很难追踪错误所在。针对这种情况,即用老代码调用老的方法名,你可能认为这实际上是一种使函数不可见的特性—这种情况让我们更明白,我们今天所写的代码不可能使用到这种方式。
所有的软件设计都没有硬性的规定,但就类中的“伪装”方法而论,你确信无疑会有很多收获,因此你可以适度地使用这个功能。
除了__call()方法之外,从PHP 5.3开始,也有了__callStatic()。你期望它做什么它就会做什么。当创建一个静态方法以调用该类中不存在的一个方法时,可以使用__callStatic()方法。就像__call()方法一样,__callStatic()方法接受方法名和数组作为参数。

1.8.2 使用__toString()方法输出对象
你是否曾经尝试过对一个对象使用echo()方法?默认情况下,它只是简单地输出“Object”,作用并不大。可以使用神奇的_toString()方法来改变这种行为,或者,让Courier类像示例一样输出一个更好的描述,可以这样输入代码:


15df2a7fb91261b84ee40fd92d2218abf7e150c3

可以序列化一个对象,也可以在系统中反序列化(unserialize),该系统中类定义的对象是可用的。但是有时我们不想序列化一些对象的属性,因为在其他的环境中它们会失效。资源就是一个很好的例子;一个文件指针在稍后一点或其他的平台上反序列化将毫无意义。
为了帮助我们解决这个问题,PHP提供了__sleep()和__wakeup()方法,它们分别在序列化和反序列化时调用。利用这些方法决定哪种属性可以序列化,且当对象是woken时,可以填充任何没有存储的对象。利用这种方式可以迅速地设计类。例如,如何在类中添加一个文件句柄以记入错误日志呢?


30a2cda0de8715c26f811067614113db9d6f5372

像这样使用神奇的方法,可以避免在序列化资源或链接到其他导致失效的对象或项目时犯错。这使我们能够安全地存储对象,并且在需要时适应特殊的需求。

相关文章
|
19天前
|
IDE PHP 开发工具
PHP中的类型提示与严格模式:提高代码可维护性
随着PHP语言的发展,开发者对代码的可读性、可维护性和可靠性有了更高的要求。PHP中的类型提示(Type Hinting)和严格模式(Strict Mode)为开发者提供了更强的类型检查机制,有助于提升代码质量和减少潜在的错误,尤其是在大型项目中。
|
1月前
|
安全 程序员 PHP
PHP中的异常处理:提升代码的健壮性
【10月更文挑战第8天】在编程的世界中,错误和异常是不可避免的。它们就像路上的坑洼,可能会让我们的程序“跌倒”。但是,如果我们能够正确地处理这些异常,就可以让我们的程序更加稳健,就像我们学会了如何在坑洼的路上稳稳地行走一样。本文将介绍PHP中的异常处理机制,以及如何使用它来提升我们的代码质量。
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
2月前
|
存储 Java 数据库连接
php学习笔记-代码基本语法-day01
本文是关于PHP编程语言的基础语法学习笔记,内容包括PHP的介绍、注释风格、数据类型、命名规范、常量和变量的使用,以及变量和常量相关的常用函数。文中详细解释了PHP的基本语法元素和一些易混淆的概念,如传值赋值与传址赋值、可变变量,以及如何检查变量是否已定义或为空。
php学习笔记-代码基本语法-day01
|
15天前
|
JSON PHP 数据格式
PHP解析配置文件的常用方法
INI文件是最常见的配置文件格式之一。
|
9天前
|
PHP 开发者
PHP中的异常处理:提升代码的健壮性
【10月更文挑战第40天】在PHP编程中,异常处理是确保应用稳定性的关键。本文将引导你理解异常处理的重要性,掌握如何在PHP中捕获和处理异常,以及如何通过自定义异常类来增强代码的错误管理能力。我们将一起探索如何利用PHP的异常处理机制,打造一个更加健壮和可靠的应用程序。
|
1月前
|
设计模式 算法 数据库连接
PHP中的设计模式:提高代码的可维护性和扩展性
【10月更文挑战第13天】 本文将探讨PHP中常见的设计模式及其在实际项目中的应用。通过对比传统编程方式,我们将展示设计模式如何有效地提高代码的可维护性和扩展性。无论是单例模式确保类的单一实例,还是观察者模式实现对象间的松耦合,每一种设计模式都为开发者提供了解决特定问题的最佳实践。阅读本文后,读者将能更好地理解和应用这些设计模式,从而提升PHP编程的效率和质量。
|
2月前
|
Java PHP 数据安全/隐私保护
PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用
本文详细介绍了PHP面向对象编程的一系列核心概念和用法,包括构造函数、析构函数、继承、方法重写、访问控制、接口、抽象类、静态成员、final关键字、以及this、self、parent这三个关键字的异同和作用。通过具体示例代码,展示了如何在PHP中使用这些面向对象的特性,以及它们在实际开发中的应用。
PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用
|
1月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。
|
1月前
|
程序员 数据库连接 PHP
PHP中的异常处理:提升代码的健壮性
【9月更文挑战第30天】在编程的世界里,错误和异常是不可避免的。本文将深入探索PHP中异常处理的机制,揭示如何通过有效的异常管理来增强代码的健壮性和可靠性。我们将从基础概念出发,逐步深入到高级应用,最后通过实际代码示例来巩固理论知识。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的指导和启示。
48 6
下一篇
无影云桌面