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是可以接受的,还是会给出错误的结果.
如果可能发生错误,请建议更正或解决方法.
使用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)