3

考虑以下情况

文件:./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 是可以接受的还是会给出错误的结果。

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

4

3 回答 3

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);
于 2009-06-23T16:35:01.467 回答
3

使用全局(不推荐)、常量或单例配置类。

简单地包括

$tablePages = 'orweb_pages';

将为您的变量提供本地范围,因此它在其他类中不可见。如果使用常量:

define('TABLE_PAGES', 'orweb_pages');

无论范围如何,TABLE_PAGES 都可用于整个应用程序的读取访问。

常量优于全局变量的优点是您不必担心它会在应用程序的其他区域被覆盖。

于 2009-06-23T16:40:33.433 回答
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"; 
?>
于 2017-06-30T11:26:16.337 回答