php - PHP 类中的外部变量访问

标签 php oop class global-variables data-access

考虑以下情况

文件:./include/functions/table-config.php 包含:

.
.
$tablePages = 'orweb_pages';
.
.

文件:./include/classes/uri-resolve.php 包含:

class URIResolve {
.
.
$category = null ;
.
.
function process_uri() {
...
    $this->category = $tablePages;
...
}
.
.
}

文件:./settings.php 包含:

.
.
require_once(ABSPATH.INC.FUNC.'/table-config.php');
require_once(ABSPATH.INC.CLASS.'/uri-resolve.php');
.
.
这行得通吗?我的意思是从 process_uri() 访问 $tablePages 是可以接受的还是会给出错误的结果。

如果可能发生错误,请提出更正或解决方法。

最佳答案

使用 global keyword :

在您分配值的文件中。

global $tablePages;
$tablePages = 'orweb_pages';

在另一个文件中:

class URIResolve {
  var $category;
  function process_uri() {
    global $tablePages;
    $this->category = $tablePages;
  }
}

此外,所有全局变量都在 $GLOBALS 数组(它本身是一个超全局变量)中可用,因此您可以在任何地方访问全局变量而无需使用 global 关键字,方法如下:

$my_value = $GLOBALS['tablePages'];

这也使得意外覆盖全局值变得更加困难。在前面的示例中,您对 $tablePages 所做的任何更改都会更改全局变量。许多安全漏洞是通过拥有全局 $user 并用更强大的用户信息覆盖它而产生的。

另一种更安全的方法是在构造函数中为 URIResolve 提供变量:

class URIResolve {
  var $category;

  function __construct ($tablePages) {
    $this->category= $tablePages;
  }

  function process_uri() {
    // Now you can access table pages here as an variable instance
  }
}

// This would then be used as:
new URIResolve($tablePages);

关于php - PHP 类中的外部变量访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1033716/

相关文章:

php - 文本区域中的格式化文本

java - NoSQL DAO 实现

c++ - 在类 B 中创建类 A 所拥有的对象,其中 B 不知道 A

c++ - Arduino - 只有第一个对象在包含在另一个对象的集合/数组中时丢失其数据属性值

Ruby 使用命名空间/模块

ruby - 你什么时候使用 attr_writer?

php - 如何在 yii2 'where' 中编写子查询?

php - 如何通过删除 PHP 中不是字母的任何内容来清理字符串

php - Eclipse for PHP,需要了解支持文件吗?

java - 编写方法 containsInstanceOf(Class<? extends SuperClassName>)