PHP使用define和__DIR__解释

时间:2017-09-18 15:06:49

标签: php oop directory

我一直在检查代码,阅读StackOverflow上的问题,但我根本就没有得到它,或者说我不理解它背后的解释和/或逻辑。

考虑以下

如果我有这样的目录结构

enter image description here

现在我想将head.php文件设置为在整个应用程序中全局访问(仅作为示例

define('Head', __DIR__ .'/views/head.php');

如果我执行上述操作,我会得到以下结果:

  

C:\ XAMPP \ htdocs中\ CARRENTAL /视图/ head.php“

技术上哪个是我想要的,但请注意URL包含正斜杠和反斜杠?

我是否可以通过在目录树中的任何位置调用Head来访问head.php文件?

对不起,我一直在检查代码并阅读手册和问题,如果有人能给新手一个明确的解释,我将不胜感激。

更新:

当我尝试在landingPage.php中执行以下操作时,我收到以下错误

include_once Head;
  

注意:使用未定义的常量Head - 假定'Head'in   第2行的C:\ xampp \ htdocs \ carRental \ views \ landingPage.php

     

警告:include_once(Head):无法打开流:没有这样的文件或   第2行的C:\ xampp \ htdocs \ carRental \ views \ landingPage.php目录

     

警告:include_once():无法打开“Head”以包含在内   (include_path ='C:\ xampp \ php \ PEAR')in   第2行的C:\ xampp \ htdocs \ carRental \ views \ landingPage.php

3 个答案:

答案 0 :(得分:1)

当你使用define('Head', __DIR__ .'/views/head.php');时,你已经在定义中硬编码了斜杠。

但是默认情况下,Windows使用\作为默认目录分隔符,因此__DIR__将在Windows中的路径中使用\(使用/作为另一个,所以它应该不是问题。)

如果您希望它们保持一致,您可以执行以下操作:

define('Head', __DIR__ .DIRECTORY_SEPARATOR ."views".DIRECTORY_SEPARATOR ."head.php");

答案 1 :(得分:0)

  

技术上哪个是我想要的,但请注意URL包含正斜杠和反斜杠?

  

我是否可以通过在目录树中的任何位置调用Head来访问head.php文件?

没有

您的命令会创建前向和后向斜杠的混合 __DIR__创建C:\xampp\htdocs\carRental'/views/head.php'是您追加的字符串。

为了能够使用您定义的HEAD,您必须加载定义它的php文件。另一个php文件不知道这个文件做什么或不做什么,只要它没有持久化。 (您在提供的代码中没有这样做) 要加载文件并使您的定义可用,请使用include_once / require_once

答案 2 :(得分:0)

__DIR__将始终使用它解析到文件的绝对目录。

前进和后退的原因。这部分:

C:\xampp\htdocs\

是Windows文件路径。 这部分:

carRental/views/head.php

是网络服务器路径,即不是Windows。

您的定义将保留正确的文件路径,因此请尝试立即包含它:

include_once Head;