PHP类中的外部变量访问

Ora*_*ind 3 php oop data-access class global-variables

考虑以下情况

file:./ include/functions/table-config.php包含:

.
.
$tablePages = 'orweb_pages';
.
.

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

file:./ settings.php包含:

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

如果可能发生错误,请建议更正或解决方法.

Pat*_*and 9

使用global关键字:

在您分配值的文件中.

global $tablePages;
$tablePages = 'orweb_pages';
Run Code Online (Sandbox Code Playgroud)

在另一个文件中:

class URIResolve {
  var $category;
  function process_uri() {
    global $tablePages;
    $this->category = $tablePages;
  }
}
Run Code Online (Sandbox Code Playgroud)

此外,所有全局变量都在$GLOBALS数组中可用(它本身是超全局变量),因此您可以通过执行以下操作来访问全局变量而无需使用global关键字:

$my_value = $GLOBALS['tablePages'];
Run Code Online (Sandbox Code Playgroud)

这也使得更难以意外地覆盖全局的价值.在前一个示例中,您所做的任何更改都$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);
Run Code Online (Sandbox Code Playgroud)