使用include路径定义全局变量


Define global variable with include-path

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

因此,我添加了一个"config.php",它包含在每个php文件中,其中配置了几个config-var。

我将其包含在中

include_once('config.php');

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

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

使所有内容都包含/要求绝对且"可移植"。

这当然适用于include_one('config.php')之后的所有include;-但是我怎样才能使这个具体的包含绝对的呢?

我现在的"解决方案"是这个代码:

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

我会将其添加到每个php文件中。

有没有更优雅的解决方案?谢谢

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

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

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

echo 'directory: '.PATH;

变量是区分大小写的,使它们不区分大小写,以便您可以使用PATH或PATH或PATH。。在末尾添加true:

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

对我来说,一个常见的用例是缩短DIRECTORY_SEPARATOR:

define('DS', DIRECTORY_SEPARATOR, true); 

问候,最大

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

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

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

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

全局变量是通往地狱的好方法。使用它们可能是任何程序员所能做的最糟糕的事情。你怎么会在第一次看到的需要分析的巨大项目中找到它???只是你不会。Ctrl+f可以,但你确定要Ctrl+f你的项目吗?另外,你通常无法访问所有的项目文件,或者你只是没有在本地光盘上所有的文件。这就像每个拼贴画上的第一课:永远不要使用全局变量。听说过静态变量包和OOP吗?这就是我们要走的路。糟糕的是,PHP不允许您将任何变量分配给常量,甚至静态变量(它与静态方法惊人地配合使用——我刚刚测试了它——为什么不使用静态变量,然后是作者?)但是,DUDE,你为什么要尝试RENAME变量。既然这就是你正在做的全部。您正在将名为"$_SERVER['DOCUMENT_ROOT']"的变量重命名为另一个名为"PATH"的变量,好吧,它更短,但这样做有什么意义?更短!=更好$_SERVER已经是超级全局的了(这也很糟糕),但至少这几个超级全局是众所周知的,我敢打赌PHP的作者不能取代它们,因为人们会活活吃掉它们:D(以及与旧版本兼容的ofc问题)