使用include-path定义全局变量

时间:2013-07-03 07:59:37

标签: php path include require

在我的php项目中,我想确保代码保持可移植性和服务器独立性。

所以我添加了一个“config.php”,它包含在每个php文件中,其中配置了几个config-var。

我用

包含它
include_once('config.php');

我的问题是,这个config.php中的第一个vars之一是:

global $path;
$path = $_SERVER['DOCUMENT_ROOT'];

使所有包含/要求绝对和“便携”。

这当然适用于include_once('config.php')之后的所有内容; - 但我怎样才能使这个具体包括绝对?

我现在的“解决方案”就是这段代码:

//set global path if not yet set
if(!isset($path)){
    global $path;
    $path = $_SERVER['DOCUMENT_ROOT'];
}

我将在每个php文件中添加。

有更优雅的解决方案吗?谢谢!

5 个答案:

答案 0 :(得分:2)

另一种方法是使用$ path作为定义,例如。

define('PATH',$_SERVER['DOCUMENT_ROOT']);

答案 1 :(得分:2)

另一种方法是,使用$ path作为静态变量定义,如

define('PATH', $_SERVER['DOCUMENT_ROOT']);

然后您可以将PATH用作正常变量

echo 'directory: '.PATH;

变量区分大小写,使它们不区分大小写,以便您可以使用PATH或路径或路径..最后添加true:

define('DOCROOT', $_SERVER['DOCUMENT_ROOT'], true); 

一个常见的用例是我缩短DIRECTORY_SEPARATOR:

define('DS', DIRECTORY_SEPARATOR, true); 

此致,Max

答案 2 :(得分:1)

那应该没问题!如果有更好的方法,我不太确定。如果您的代码依赖于config.php,我建议使用require_once('config.php');如果找不到或包含该文件,则脚本将被终止,从而导致致命错误,并且在该点之后不会继续!

答案 3 :(得分:0)

如果你没有使用php框架..这是最好的解决方案..除非你想把它放在$ _SESSION var但是我不推荐它..

答案 4 :(得分:0)

全局变量确实是地狱的好方法。使用它们很可能是程序员所能做的最糟糕的事情。您是如何在第一次看到的大型项目中找到它并且需要分析???只是你不会。 Ctrl + f ok,但是,你确定要对你的项目进行ctrl + f吗?另外,您通常无法访问所有项目文件,或者您只是在本地光盘上没有它们。这就像每个拼贴画的第一课:永远不要使用全球变量。有没有听说过静态变量和OOP?这是要走的路。太糟糕了,PHP不允许你将任何变量分配给常量甚至是静态变量(它非常适用于静态方法 - 我只是测试了它 - 为什么静态变量然后是作者呢?)但DUDE,为什么你试图重命名变量。因为这就是你正在做的事情。你正在将名为'$ _SERVER ['DOCUMENT_ROOT']'的变量重命名为另一个名为'PATH'的变量,好吧它更短但是这样做的重点是什么?更短!=更好。 $ _SERVER已经超级全​​球化了(这也很糟糕),但至少那些少数超级全球人都为大家所熟知,我打赌PHP的作者无法取代它们,因为人们会活着吃它们:D(以及与旧的兼容性的问题)版本)的