考虑以下情况
文件:./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/