require_once模板问题

asd*_*sdf 0 php filesystems

我是MVC的新手,我正在重做我的很多代码.

我有master.php(索引)有:

<?php require_once("header.php"); ?>
Run Code Online (Sandbox Code Playgroud)

双方master.php并header.php在同一个文件夹中尚未出现以下错误:

警告:require_once(1)[function.require-once]:无法打开流:第15行/Users/MyName/Sites/MySite/Views/master.php中没有此类文件或目录

致命错误:require_once()[function.require]:在第15行的/Users/MyName/Sites/MySite/Views/master.php中打开所需的'1'(include_path =':')失败

这种情况以前没有发生过.(文件都在根文件夹中).我不知道问题是什么,因为它们在同一个文件夹中 - 我不必返回'../'或引用任何其他文件夹.我在这里错过了什么?

谢谢.

smo*_*ove 5

在您的评论中,您说您的代码是:

<?php require_once("header.php") or die; ?>
Run Code Online (Sandbox Code Playgroud)

请尝试省略"或死" - > ist不是必需的,因为如果找不到文件,require_once将触发致命错误.

编辑:我测试了它,省略了"或死",它会起作用.

编辑2:解释为什么会发生这种情况:上面的代码也可以这样写:

require_once ( ("header.php") or die() );
Run Code Online (Sandbox Code Playgroud)

因为require_once不是函数,而是php中的语句,大括号是可选的,php将上面解释为布尔表达式,其中字符串"header.php"被计算为布尔值"true".True会被强制转换为字符串(导致"1"),并且此字符串将被传递回需要一次.

所以上面的代码被解释为

require_once("1")
Run Code Online (Sandbox Code Playgroud)

以下是逐步解释的方法:

(("header.php") or die()) = (TRUE or die())
(TRUE or die()) = TRUE 
(string) TRUE = '1';
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 ;)