如何实现;“应用范围变量”;在php中?
我现在正在做一个新的PHP项目,这次我想从一开始就掌握基本知识。以前我发现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
/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" ... />