我有以下代码:
switch ($page)
{
default:
$page = 'error';
// header
require_once 'pages/header.php';
// content
require_once 'pages/error.php';
break;
case 'index':
case 'login':
case 'register':
case 'profile':
// header
require_once 'pages/header.php';
// content
if (file_exists('pages/' . $page . '.php')) require_once 'pages/' . $page . '.php';
break;
}
/*
* Footer
*/
require_once 'pages/footer.php';
现在让我们举一个例子,并将以下代码应用于header.php:
if ($page == 'profile'):
include 'members/core/init.php';
if(isset($_GET['username']) && empty($_GET['username']) === false) {
$username = htmlentities($_GET['username']);
if ($users->user_exists($username) === false) {
header('Location:index.php');
die();
}else{
$profile_data = array();
$user_id = $users->fetch_info('id', 'username', $username);
$profile_data = $users->userdata($user_id);
}
endif;
以下是footer.php:
if ($page == 'profile'):
}else{
header('Location: index.php');
}
endif;
网站结构如下:
的index.php
页面(文件夹)
=
的header.php
的index.php
footer.php
profile.php
但问题是它的header.php和footer.php,似乎没有与另一个连接,因为我收到以下错误:
解析语法错误,T_ENDIF
如何更改代码以使用footer.php与header.php建立连接?
干杯!
答案 0 :(得分:3)
PHP中有两种语法用于IF - THEN - ELSE。一个是if (condition) :
... endif;
。另一个是if (condition) { } else { }
。不要混用这些。 如果您使用冒号:
和endif;
,不使用花括号{ }
。 如果你使用花括号(推荐!),不使用冒号和endif。
在switch
声明中,我建议您将default
放在最后。
答案 1 :(得分:1)
正如其他人所指出的那样,你混合了if() { ... }
和if(): endif;
,这让人感到困惑。两者之间没有实际差异,但它们必须成对匹配 - 您无法编写if ( test_something() ) { do_something(); endif;
这在Alternative syntax for control structures下的手册中有记录:
注意:不支持在同一控制块中混合语法。
另外需要注意的是,每个包含的PHP文件都必须有自己的有效语法 - PHP不会将所有代码粘在一起然后解析它 - 所以你不能打开if
语句一个文件,然后在另一个文件中关闭它。 (我实际上找不到一个好的手动参考;如果有人知道,请在评论中告诉我,或在此处进行编辑。)
如果在打开if
语句或类似块时总是进一步缩进,则代码结构通常会变得更加清晰。如果我们对你的代码执行此操作,并删除其他所有内容,我们就会留下这个;看到我添加的评论出错的地方:
// header.php
if ($page == 'profile'):
if(isset($_GET['username']) && empty($_GET['username']) === false) {
if ($users->user_exists($username) === false) {
}else{
}
// Closing with endif, but opened with {
endif;
// unclosed if statement at end of file
// footer.php:
if ($page == 'profile'):
// closing with } but opened with :
}else{
}
// stray endif, presumably intended to match the if: at the top of header.php
endif;
答案 2 :(得分:0)
在所有特定案例陈述之后放置您的默认语句。另外,默认语句块将被执行,其他情况将被忽略
switch ($page)
{
case 'index':
case 'login':
case 'register':
case 'profile':
// header
require_once 'pages/header.php';
// content
if (file_exists('pages/' . $page . '.php')) require_once 'pages/' . $page . '.php';
break;
default:
$page = 'error';
// header
require_once 'pages/header.php';
// content
require_once 'pages/error.php';
break;
}
修改强>
php
endif;
语句
对不起,我学到了什么......谢谢:)