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

PHP中的MySQLi扩展学习MySQLI_STMT对象操作

php.ini 中的默认 php mysqli 连接

使用 PHP7 在 MariaDB 中的 MySQLi 和 PDO

PHP中的MySQLi扩展学习mysqli类的一些少见的属性方法