PHP中的Mysqli资源作为参数或全局
Posted
技术标签:
【中文标题】PHP中的Mysqli资源作为参数或全局【英文标题】:Mysqli resource in PHP as a parameter or global 【发布时间】:2013-01-25 09:37:43 【问题描述】:哪种方法更好地将 mysqli 资源传递给页面上的函数?作为值参数?作为参考参数?让它全球化?
我一直在考虑这个问题,但我不知道哪个更好或如何看待它。
提前致谢
【问题讨论】:
不要使用全局变量。永远。 它们不安全吗?或者他们有什么问题? 它们可能不安全。但是我(和大多数其他人)对它们的问题是它们如何使代码非常难以阅读/理解。所以请尽量避免它们。 而且当将资源传递给函数时,php 总是通过引用传递(按值传递没有意义),所以不必强制通过引用传递。 【参考方案1】:大多数人建议的模式是通过参数的函数传递它,或者如果您正在编写 OOP 方式,则使用依赖注入。
全局变量通常被认为是一种不好的做法,因为它们使阅读代码和检测依赖关系变得困难。
知道还有另一种选择是正确的,但它一直是网络上批评的主题:单例设计模式。最大的问题是:
基本上是引入全局变量(实例)的 hack,因此继承了全局变量的问题。 违反单一职责原则。 隐藏程序的依赖项 很难进行单元测试您可以在这里找到一些参考资料:
Global variables are bad Dependency Injection Are Singletons really that bad? What is so bad about Singletons? Why Singletons are evil Singleton is an anti pattern Single responsibility principle【讨论】:
然后,我将习惯于通过参数传递 mysqli 资源并避免使用全局变量。我只是想知道意见,从我的第一个“大”项目开始。谢谢【参考方案2】:肯定是全球性的。
你会用无用的额外参数污染你的代码。 看,大多数人只是背诵一些规则,并无条件地遵循它们。但最好理解它们的含义并明智地使用,这取决于上下文。
称猫为猫并没有错。然而,将全局变量称为全局变量并没有错。
尽管“全局变量通常被认为是一种不好的做法”,但这种情况是不同的。
当您使用 global
关键字传递 local 变量时,这确实是一种不好的做法。它使您的代码晦涩难懂且难以支持-我不是在争论这一点。
但是真正的 global 变量是完全不同的事情。 PHP 一直在使用它们——$_SERVER
数组就是一个完美的例子。
因此,对于一个真正的全局变量,它在整个代码中一直使用并作为文档化 API 的一部分 - global
是最佳选择。
【讨论】:
以上是关于PHP中的Mysqli资源作为参数或全局的主要内容,如果未能解决你的问题,请参考以下文章
函数中的 PHP Mysqli_real_escape_string 期望参数为 1。空值
PHP中的MySQLi扩展学习MySQLI_STMT对象操作