php - 为什么在函数内部使用 "global"引用被认为是不好的做法?

标签 php security function scope encapsulation

<分区>

Possible Duplicate:
Are global variables in PHP considered bad practice? If so, why?
global in functions

编辑:上面链接中回答的问题。

不,php 中的“global”与其他语言中的 global 不是一回事,虽然它不会引入任何安全问题,但它会使其他人难以理解代码。


运算符(operator):

项目摘要 - 我正在编写一个 Web CMS 来尝试使用 PHP/MySQL。为了分解代码,我对这些基本层/模块有一个概念:

数据
- MySQL 表
- PHP 变量

函数
- SQL - 获取/设置/等
- 前端 - 显示页面
- 后端 - 经理

介绍
- HTML 模板
- 页面内容
- CSS 样式表

目标很常见。使用 MySQL 保存站点设置和页面内容,使用 php 获取/操作所服务页面的内容数据,然后插入 html 模板并回显到浏览器。来自 C# 等 OO 语言,我遇到的第一个问题是使用包含和函数时的变量范围问题。

从一开始,我就一直在编写纯函数 php 文件,并将它们包含在具有现有变量数组定义的其他文件中需要的地方。例如,暂时忽略数据层,一个简单的页面通常看起来像这样:

文件 1(页)

$DATA_PAGE = Array
(
  'temp'  = null,
  'title' = null,
  [...]
);

include 'functions.php';

get_data ( 'page.php' );

[...]

run_html ();

文件2(函数)

function get_data ( $page_name )
{
  global $DATA_PAGE;

  $DATA_PAGE [ 'temp'  ] = 'template';
  $DATA_PAGE [ 'title' ] = 'test page';
  [...]
}

function run_html ()
{
  global $DATA_PAGE;

  echo '<html>';
  echo '<head>';
  echo '<title>' . $DATA_PAGE [ 'title' ] . '</title>';
  [...]
}

我选择这种方法有几个原因:

  • sql fetch后这些数组中的数据可能会在任何地方使用,包括页面内容
  • 我不想有十几个函数参数,也不想传递整个数组

代码运行良好。但是在我找到的每篇关于这个主题的文章中,我的函数中的“全局”调用都被称为不好的做法,尽管这些文章从未说明为什么?我认为这意味着“使用父范围”。是否在我的应用程序中引入安全漏洞?有更好的方法吗?提前致谢。

最佳答案

我认为避免这种情况的首要原因是它隐藏了依赖关系。

您的函数 get_datarun_html 没有以任何方式宣传它们共享数据,但它们确实以一种很大的方式共享数据。并且没有办法(除非阅读代码)知道如果 get_data 没有被调用,run_html 将毫无用处。

随着代码库的复杂性增加,这种潜伏的依赖性将使您的代码变得脆弱且难以推理。

关于php - 为什么在函数内部使用 "global"引用被认为是不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8715897/

相关文章:

PHP PREG_REPLACE REGEX 提及用户名

php - 使用Docker同时运行多个Web开发环境

php - Laravel Sail数据库连接被拒绝错误

php - 如何减少 PHP 中 if-else 语句的数量?

javascript - 建立了无需 SSL 的安全注册和身份验证的 javascript 解决方案

azure - 通过 MS Graph 将用户添加到 AAD 组

Spring security jdbcAuthentication 不适用于默认角色处理

c - 对于函数指针 func_ptr,(*func_ptr)() 调用该函数。但是为什么 (****func_ptr)() 或 (***func_ptr)() 有效?

c++ - 如何在不使用变量 C/C++ 的情况下将常量数组文字传递给采用指针的函数?

c - 为什么这段代码不返回垃圾值?