php - PHP Globals 的安全替代品(良好编码实践)

标签 php performance security

多年来我一直在使用 global $var,$var2,...,$varn对于我的应用程序中的方法。我已经将它们用于两个主要实现:

获取已设置的类(例如数据库连接),并将信息传递给显示到页面的函数。

示例:

$output['header']['log_out'] = "Log Out";
function showPage(){
     global $db, $output;
     $db = ( isset( $db ) ) ? $db : new Database();
     $output['header']['title'] = $db->getConfig( 'siteTitle' );
     require( 'myHTMLPage.html' );
     exit();
}

但是,这样做会对性能和安全产生影响。

我可以使用哪些替代实践来保持我的功能但改进设计、性能和/或安全性?

这是我在 SO 上问过的第一个问题,所以如果您需要澄清,请发表评论!

最佳答案

另一种方法称为依赖注入(inject)。简而言之,这意味着您将函数/类/对象所需的数据作为参数传递。

function showPage(Database $db, array &$output) {
    ...
}


$output['header']['log_out'] = "Log Out";
$db = new Database;

showPage($db, $output);

出于多种原因,这更好:
  • 本地化/封装/命名空间功能(函数体不再隐式依赖于外部世界,反之亦然,只要函数调用不改变,您现在可以重写任何部分而无需重写另一部分)
  • 允许单元测试,因为您可以独立测试功能而无需设置特定的外部世界
  • 只需查看签名
  • 就可以清楚地了解函数将对您的代码执行的操作

    关于php - PHP Globals 的安全替代品(良好编码实践),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7290993/

    相关文章:

    php - 将 mysql 查询转换为 oracle 查询

    mysql - 如何在 MySQL 中优化此查询

    performance - 对这些时间复杂度进行排序

    asp.net-mvc - ASP.NET MVC 子域授权

    c# - 通过 ACL 保护注册表项以删除对非管理员的所有访问权限

    security - 蜜 jar 验证码应该比 'display: none;' 更复杂吗?

    PHP在不离开当前页面的情况下制作下载计数器

    php - 安装 Vestacp 时出现 ioncube 和 php 错误

    javascript - 如何从两个值动态绘制 Bootstrap 进度条

    performance - 尾递归函数总是要避免吗?