搜索
首页后端开发php教程用PHP开发健壮的代码三编写可重用函数_PHP教程

用PHP开发健壮的代码三编写可重用函数_PHP教程

Jul 13, 2016 pm 05:29 PM
php代码函数实际开发情况下文章有效系列编写重用

在本系列文章(有关如何在实际情况下开发有效的 PHP 代码)的第 3 部分中,Amol Hatwar 讨论了如何构建最有效的功能型函数,使用这些函数不会牺牲太多性能或可管理性。作者重点阐述了如何编写可重用函数,并介绍了如何避免与该任务相关的一些最常见问题。 欢迎回来。在本系列文章的第 1 部分中,我讨论了一些基本的 PHP 设计规则,并介绍了如何编写安全、简单、与平台无关且快速的代码。在第 2 部分中,我介绍了变量,并讨论了它们在 PHP 编码中的用法 — 好的和坏的实践。 在本文中,您将了解如何在 PHP 中明智地使用函数。在每一种高级编程语言中,程序员都可以定义函数,PHP 也不例外。唯一的区别在于,您不必担心函数的返回类型。 深入研究 函数可用于: 将几行代码封装成一条语句。 简化代码。 最重要的是,将应用程序作为更小的应用程序相互协调的产物。 对于从编译语言(如 C/C++)转到 PHP 的开发人员来说,PHP 的性能级别是令人吃惊的。在使用 CPU 和内存资源方面,用户定义的函数非常昂贵。这主要是因为 PHP 是解释型和松散类型的。 包装与否 有些开发人员仅仅因为不喜欢函数的名称就把他们使用的每个函数都包装起来,而另一些开发人员却根本不喜欢使用包装。 包装现有的 PHP 函数而不添加或补充现有的功能,是完全不能接受的。除了会增加大小和执行时间外,这样的重命名函数有时可能会带来管理上的恶梦。 代码中的内联函数会导致莫名其妙的代码,甚至是更大的管理灾难。这样做的唯一好处可能就是得到一个更快的代码。 更明智的方法是,仅在需要多次使用代码,并且对于您希望实现的任务没有可用的内置 PHP 函数时才定义函数。您可以选择重命名或仅当需要时才有限制地使用。 图 1 中的图表粗略地显示了可管理性和速度与使用的函数数量之间的相互关系。(在此我没标明单位,因为数字取决于个体和团队的能力;这一关系是重要的可视数据。) 图 1. 可管理性/速度 Vs. 函数数量 命名函数 正如我在本系列文章的第 2 部分(请参阅参考资料)中提到的,要获得有效的代码管理,始终都使用公共的命名约定是必不可少的。 其它两个需要考虑的实践是: 选择的名称应当能很好地提示函数的功能。 使用表明包或模块的前缀。 假定您有一个名为 user 的模块,它包含用户管理函数,那么对于检查用户当前是否在线的函数而言,诸如 usr_is_online() 和 usrIsOnline() 这样的函数名称都是上佳之选。 将上面的名称与 is_online_checker() 这样的函数名称相比较。得到的结论是,使用动词优于使用名词,因为函数始终都会做点什么。 多少参数? 很有可能您将使用已经构造的函数。即使情形并非如此,您可能也希望最大化代码的使用范围。要做到这一点,您和其他开发人员应当继续开发易于使用的函数。没人喜欢使用那些所带的参数既晦涩又难于理解的函数,因此请编写易于使用的函数。 选择一个能够说明函数用途的名称(并减少函数使用的参数数量)是确保易于使用的一个好方法。参数数量的幻数是什么呢?依我看来,超过三个参数就会使函数难以记忆。使用大量参数的复杂函数几乎都能被拆分成多个更简单的函数。 没人喜欢使用凑合的函数。 编写优质函数 假定您希望在将 HTML 文档放到浏览器之前设置文档的标题。标题就是

... 标记之间的所有内容。 假定您希望设置 title 和 meta 标记。不使用 setHeader(title, name, value) 函数执行所有工作,而分别使用 setTitle(title) 和 setMeta(name, value) 完成各项工作是一个更佳的解决方案。该方案相互独立地设置 title 和 meta标记。 进一步考虑,标题可以只包含一个 title 标记,但它可以包含多个 meta 标记。如果需要设置多个 meta 标记,则代码必须多次调用 setMeta()。在这种情况下,更佳的解决方案是将带有名称-值对的两维数组传递给 setMeta(),并且让函数循环执行该数组 — 同时执行所有操作。 一般来说,象这样的同时的函数更可取。用函数需要处理的所有数据一次性调用函数,始终优于多次调用函数,并以增量的方式为其提供数据。编写函数时的主要思想是,尽量减少从其它代码对其的调用。 据此,setHeader() 解决方案实在不是好方法。显而易见,我们可以将 setHeader() 重构成 setHeader(title, array),但是也必须考虑到我们失去了相互独立地设置 title 和 meta 标记的能力。 此外,在实际环境中,标题可能包含多个标记,而不只是 title 和 meta 标记。如果需要添加更多标记,您必须更改 setHeader(),并且改变依赖于它的所有其它代码。在后一种情形下,只需多编写一个函数。 下面的等式适用于所有编程语言: 便于记忆的名称 + 清晰的参数 + 速度和效率 = 在所有编程语言中都适用的优质函数 用分层的方法协调函数 函数很少是独自存在的。它们与其它函数共同起作用,交换和处理数据以完成任务。编写可与相同组或模块中的其它函数良好协作的函数很重要,因为这些函数组或模块组就是您必须能够重用的。 让我们继续假想的页面构建示例。这里,该模块的职责是用 HTML 构建一个页面。(现在让我们先略过细节问题和代码,因为示例的目的只是为了说明:在提高可重用性要素的同时,如何使函数和函数组方便地相互配合。) 从内置的 PHP 函数开始,您可以构建抽象函数,使用它们创建更多处理基本需求的函数,然后依次使用这些函数构建特定于应用程序的函数。图 2 可以让您了解其工作原理。 图 2. 分层的函数 现在,先在内存中构建页面,然后将完成的页面分发给浏览器。 在内存中构建页面有两大好处: 可以用自己的脚本高速缓存已完成的页面。 如果未能成功构建页面,可以废弃完成一半的页面,并使浏览器指向出错页面。 现在,您的用户将不会看到页面中有错误消息的报告了。 根据大多数页面的结构,需要将页面构建模块分成执行以下功能的函数: 绘制顶栏 绘制导航栏 显示内容 添加脚注 还需要执行下述功能的函数: 高速缓存页面 检查页面是否已经被高速缓存 如果页面已被高速缓存则显示它 让我们称之为页面构建器(pagebuilder)模块。 页面构建器模块通过查询数据库执行其工作。由于该数据库是 PHP 之外的,所以将使用数据库抽象模块,其职责是为 PHP 中各种不同的特定于供应商的数据库函数提供同类接口。该模块中的重要函数有:连接数据库的函数、查询数据库的函数以及提供查询结果的函数。 假定您还希望实现一个站点范围的搜索引擎。该模块将负责搜索站点上与某个关键字或某组关键字相关的文档,并根据搜索字符串的相关性或出现该字符串次数最多来显示结果。如果您还希望记录搜索以便进行审计,该模块将与数据库抽象模块一起使用。 请记住,您将接受来自用户的输入。您需要将其显示在屏幕上,并废弃那些看上去怀有恶意的内容。这需要另一个模块,它负责验证用户通过表单提交的数据。 至此,您对我正在讲述的概念肯定有了大致的了解。必须将最核心的功能分解成逻辑模块,要执行它们的任务,应用程序必须使用这些模块提供的函数。 使用这种分层的方法,简单的页面构建呈现应用程序可能如图 3 所示。 图 3. 分层的页面构建应用程序 请注意,在本示例中,核心模块与处理应用程序的模块之间没有层次。也就是说,核心模块可以从下面的抽象模块或层中声明的函数调用和声明函数,但是应用程序代码可能不能这样做。如果应用程序代码中的函数受任何低层函数“污染”或者封装了任何低层函数,那么应用程序代码不应该声明这些函数。它只能使用低层的函数。这被证实是一个更快的方法。 功能型技术 既然您已经了解了应如何使用和编写函数,那么就让我们研究一些常用的技术。 使用引用 简单点说,引用就象 C 语言中的指针。唯一的区别在于,在 PHP 中,不需要象在 C 语言中那样使用 * 运算符来解除引用。您可以将它们看成是变量、数组或对象的别名。无论执行什么操作,别名都将影响实际的变量。 清单 1 演示了一个示例。 清单 1. 变量引用 当将参数传递给函数时,函数接收到参数的副本。只要函数一返回,您对参数所做的任何更改都将丢失。如果您希望直接改变参数,这会是一个问题。清单 2 演示了一个说明该问题的示例。 清单 2. 将参数传递给函数时的问题 我们希望直接改变 $myNum;通过将 $myNum 的引用传递给 half() 函数可以轻易地完成该工作。但是请记住,这并不是个好实践。使用您代码的开发人员必须跟踪所用的引用。这可能会在不经意间导致错误蔓延。它还会影响到的函数的易用性。 更好的实践是直接在函数声明中使用引用 — 在我们的例子中,使用 half(&$num) 代替 half($num)。这样,通过记住引用,您就无须记住要将参数传递给函数了。 PHP 处理幕后的一些事情。较新的 PHP 版本(从 4.0 起的后续版本)不赞成在调用时按引用传递,并且无论如何都会发出警告。(这里有一些建议:如果您正在使用针对早期 PHP 版本编写的代码,那么最好更新代码,而不是通过改变 php.ini 文件来更改 PHP 的行为。) 保留函数调用之间的变量 常常需要维护函数调用之间的变量值。可以使用全局变量,但是变量非常脆弱,并可能被其它函数破坏。我们希望变量对于函数而言是局部变量,并仍然保留其值。 使用 static 关键字是一个很好的解决方案。当我希望计算在无法使用调试器的情况下有多少用户定义的函数被执行时,我常使用这种方法。我只是改变了所有函数(当然是使用自动化的脚本),并在函数体的第一行添加了对执行计数工作的函数的调用。清单 3 描述了该函数。 清单 3. 计数用户定义的函数 function funcCount() { static $count = 0; return $count++; } 刚好在脚本完成之前通过调用 funcCount() 来收集变

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/531713.htmlTechArticle在本系列文章(有关如何在实际情况下开发有效的 PHP 代码)的第 3 部分中,Amol Hatwar 讨论了如何构建最有效的功能型函数,使用这些函数...
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
PHP行动:现实世界中的示例和应用程序PHP行动:现实世界中的示例和应用程序Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP:轻松创建交互式Web内容PHP:轻松创建交互式Web内容Apr 14, 2025 am 12:15 AM

PHP可以轻松创建互动网页内容。1)通过嵌入HTML动态生成内容,根据用户输入或数据库数据实时展示。2)处理表单提交并生成动态输出,确保使用htmlspecialchars防XSS。3)结合MySQL创建用户注册系统,使用password_hash和预处理语句增强安全性。掌握这些技巧将提升Web开发效率。

PHP和Python:比较两种流行的编程语言PHP和Python:比较两种流行的编程语言Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP的持久相关性:它还活着吗?PHP的持久相关性:它还活着吗?Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP的当前状态:查看网络开发趋势PHP的当前状态:查看网络开发趋势Apr 13, 2025 am 12:20 AM

PHP在现代Web开发中仍然重要,尤其在内容管理和电子商务平台。1)PHP拥有丰富的生态系统和强大框架支持,如Laravel和Symfony。2)性能优化可通过OPcache和Nginx实现。3)PHP8.0引入JIT编译器,提升性能。4)云原生应用通过Docker和Kubernetes部署,提高灵活性和可扩展性。

PHP与其他语言:比较PHP与其他语言:比较Apr 13, 2025 am 12:19 AM

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

PHP与Python:核心功能PHP与Python:核心功能Apr 13, 2025 am 12:16 AM

PHP和Python各有优势,适合不同场景。1.PHP适用于web开发,提供内置web服务器和丰富函数库。2.Python适合数据科学和机器学习,语法简洁且有强大标准库。选择时应根据项目需求决定。

PHP:网络开发的关键语言PHP:网络开发的关键语言Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中