Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何实现;“应用范围变量”;在php中?_Php_Global Variables_Environment Variables - Fatal编程技术网

如何实现;“应用范围变量”;在php中?

如何实现;“应用范围变量”;在php中?,php,global-variables,environment-variables,Php,Global Variables,Environment Variables,我现在正在做一个新的PHP项目,这次我想从一开始就掌握基本知识。以前我发现PHP中需要/包含文件有点痛苦,请考虑以下结构: /application_root/index.php /js/... /css/... /php/... /conf/... ... 在index.php中,我当然可以使用如下内容: <link

我现在正在做一个新的PHP项目,这次我想从一开始就掌握基本知识。以前我发现PHP中需要/包含文件有点痛苦,请考虑以下结构:

/application_root/index.php
                 /js/...
                 /css/...
                 /php/...
                 /conf/...
                 ...
在index.php中,我当然可以使用如下内容:

<link rel="stylesheet" href="css/sample.css" ... />
<script type="text/javascript" src="js/sample.js"></script>

参考包含的css和js,甚至php代码片段。但是,这只适用于index.php,它位于我的应用程序文件夹的根目录下。我认为这不好

我遇到了Java应用程序配置文件“web.xml”,您可以在其中定义可以简单引用的应用程序范围变量。NET与C#具有类似的功能。如何在简单的php代码中实现这一点,以便从我应用程序中的任何php文件中键入:

<?php echo "<link href='".$application_root_url."/php/sample.css' ..."; ?>

这里的路径是一个URI,而不是文件系统位置。无论如何,您可能试图以错误的方式执行此操作。

您必须使用相对路径。所以只需“/css/sample.css”安装“css/sample.css”


这比总是从yourdomain.com/css/sample.css加载要好得多,即使您的.php位于yourdomain.com/somefolder/file.php中,php脚本也只生成浏览器解释的输出。作用域是浏览器中的URL,而不是文件系统上的URL

所以$application\u root\u url变量的值是针对浏览器的,而不是针对PHP脚本的

如果要使用INI文件,可以使用PHP的函数

  • 除了惰性编码之外,没有理由使用全局变量
  • 如果两个相同的文件名位于不同的路径上,PHP将很难确定要包含哪个文件
  • 你在找什么
  • 但是,我更喜欢使用
    常量
    ,我没有要求在任何地方都定义常量,只是将所有基本路径放入配置文件中,并在应用程序开始时要求这样做

    有人可能会说常量比较慢,使用类常量可能需要包含多个文件,而使用类常量比较慢,哪一个更好?最好的事情是一旦定义了常量,没有人或代码可以覆盖它

    举例说明

    define('css_root', '/home/user/apache/css');  <-- server absolute path
    define('css_web_root', '/css');               <-- web root, for HTML
    define('css_cache_root', '/cache/css');       <-- cache directory
    

    define('css_root','/home/user/apache/css') 您不想使用全局变量,因为它们会中断

    set_include_path
    不会有什么好处,尤其是在HTML中使用这些变量时,因为include_路径是相对于应用程序的文件系统路径而不是其基本url的

    确定应用程序基本路径通常不是通过配置文件来完成的,因为在应用程序具有网关脚本时很容易检测到。因为这些都是常量,所以定义一个常量是有意义的:

    define('APP_ROOT', dirname(__FILE__));
    define('APP_URL', dirname($_SERVER['PHP_SELF']));
    
    但是,如果要分析INI文件,可以使用或(>=5.3.0):


    您可能想尝试类似MVC模式的东西。例如,ZendFrameworkds MVC将变量
    $this->base\u url
    传递给视图。视图是HTML所在的位置,因此您可以在视图中执行以下操作:

    <link rel="stylesheet" href="<?php echo $this->base_url; ?>/css/sample.css" ... />
    

    :“PHP中没有用于用户定义超全局变量的机制。”这个问题的标题具有误导性。
    
    <link rel="stylesheet" href="<?php echo $this->base_url; ?>/css/sample.css" ... />