考虑以下情况
文件:./ include / functions / table-config.php
包含:
.
.
$tablePages = 'orweb_pages';
.
.
file:./ 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是可以接受的,还是会产生错误的结果。
如果可能发生错误,请提供更正或解决方法。
答案 0 :(得分:9)
在您分配值的文件中。
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);
答案 1 :(得分:3)
使用全局(不推荐),常量或单例配置类。
简单地包括
$tablePages = 'orweb_pages';
将为您的变量提供局部范围,以便在其他类中不可见。如果你使用常数:
define('TABLE_PAGES', 'orweb_pages');
无论范围如何,TABLE_PAGES都可用于整个应用程序的读访问。
常量超过全局变量的优点是您不必担心它会在应用程序的其他区域被覆盖。
答案 2 :(得分:0)
<?php
//Use variable php : $GLOBALS in __construct
$x = "Example variable outer class";
class ExampleClass{
public $variables;
function __construct()
{
$this->variables = $GLOBALS; //get all variables from $GLOBALS
}
// example get value var
public function UseVar(){
echo $this->variables['x']; // return Example variable outer class
}
// example set value var
public function setVar(){
$this->variables['x'] = 100;
}
}
echo $x // return Example variable outer class;
$Example = new ExampleClass();
$Example->UseVar(); // return Example variable outer class
$Example->setVar(); // $x = 100;
// or use attr variables
echo $Example->variables['x']; // 100
$Example->variables['x'] = "Hiii";
?>