PHP交换机箱连接

时间:2013-11-11 05:36:05

标签: php switch-statement case

我有以下代码:

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建立连接?

干杯!

3 个答案:

答案 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;语句

对不起,我学到了什么......谢谢:)