【问题标题】:Can I use an include within an include in PHP?我可以在 PHP 的包含中使用包含吗?
【发布时间】:2011-09-16 23:01:43
【问题描述】:

我正在尝试使用 PHP 设置我的网站,但我是初学者。

我已经知道如何通过单击导航链接来包含主要内容(只是单独的 .php 文件中的内容)。

但是如果包含的内容有一个子导航并且我也想使用这个导航将内容包含到那个导航中怎么办?

包含在包含工作中吗?

我如何告诉包含内容中的链接,他应该先加载索引,然后加载自身,然后从子导航中选择内容?

或者有没有更好的方法来构建我的代码?

这是我的 index.php 代码:

<?php 

if ($_GET['page'] == 'first' ){
    include 'first.php';
}else if ($_GET['page'] == 'second' ){
    include 'second.php';
}else if ($_GET['page'] == 'third' ){
    include 'third.php';
}else if ($_GET['page'] == 'fourth' ){
    include 'fourth.php';
}else include 'drawing.php';

?>

我将链接称为:

href="index.php?page=first"

我现在可以对 subones 使用相同的内容吗?但是要补充什么才有效呢?

编辑:我再次提出我的问题,因为在得到了一些答案之后,我现在感觉 PHP 无法完成我想要实现的目标。

所以让我再解释一下我的想法:

我的 index.php 是独立编码的(页眉和页脚),它有一个包含部分,我想在其中加载内容。该链接已经提供并且有效。我正在加载的内容不是独立编码的。它只包含一个包含所有内容的 div,仅此而已。我认为这就是包含的原因。

好的,但是现在 index.php 中加载的内容有更多指向其他包含的链接。这是一个子导航。因此,我还想将此处的内容包含到刚刚加载的内容中,这也不是独立的内容(没有页眉或页脚)。

我可以想象的问题是,已经加载到 index.php 中的内容当然不知道它是加载的内容。因此,出于这个原因,当它应该自己加载另一个内容时,它不能重建自己,因为现在他的“创建页面”确实存在。对?

确切地说,我的问题:是否有一种用于加载内容的子导航的链接,上面写着 href="loadindexthenloadmeinindexthenloadtheincludedcontentIhavejustaskedfor"

如果没有,我很想学习。

如果这种方式只是不正统,那么请告诉我。

感谢您的关注。

【问题讨论】:

    标签: php include


    【解决方案1】:

    是的,您可以在包含中包含。

    将包含视为将包含文件的内容复制并粘贴到include "blah.php" 所在的位置。

    构建它的“更好的方法”是拥有一个“主”视图,包括应该相互独立的其他部分和片段。

    您应该注意所包含的文件,因为您最终可能会多次包含某些文件。如果包含定义了一个函数,这可能是一个问题,这会导致您的脚本崩溃。在这种情况下,您可以使用include_once


    话虽如此...包含在包含中?

    (抱歉无法抗拒)

    【讨论】:

    • 这很简单。每个页面有 3 个子内容。索引应该能够包含主要内容。主要内容只是子内容。所以 index > maincontent > SubA、SubB 或 SubC。
    • @Melros 是的,没关系。将表示与业务逻辑分开实际上是一件非常好的事情(通过使用 maincontent 而不是在 index.php 中输出内容)
    【解决方案2】:

    首先:

    $routes = array( 
       'first'    => 'first.php',
       'second'   => 'second.php',
       'third'    => 'third.php',
       'fourth'   => 'fourth.php',
       'fallback' => 'drawing.php'
    );
    
    $page = $_GET['page'];
    if ( !array_key_exists( $page , $routes ))
    {
       $page = 'fallback';
    }
    
    include $routes[$page];
    

    是的,您可以在 include 中包含 include。

    你也可以用它们做很多其他事情,比如创建一个simple templating engine。或者将数据从 include 传递到变量中:

    假设你有行:

    $config = include 'conf.php';
    

    并且 `conf.php' 包含:

    <?php
       return array(
          'foo' => 'lorem ipsum sit dolor amet',
          'bar' => 'cogito ergo sum'
       );
    ?>
    

    然后它将在$config .. 中传递这个数组,但这个技巧很少使用。并不总是最好的方法,请应用理由。

    【讨论】:

    • +1 推荐一个简单的模板引擎并直接使用PHP。
    • 好吧,作为一个PHP初学者,我现在真的什么都不懂。我试图将我的代码放入包含的内容中并尝试打开包含的内容中的子内容,但现在我得到了一个“无尽”的包含。
    • 好的,这就是我所拥有的:加载内容中的链接:href="index.php?page=first?sub=subfirst" 我知道它不起作用。但是你知道我的意思吗?这是正确的方法吗?
    • @Melros 听起来像是您将文件本身包含在内,从而创造了无穷无尽的 .. 东西。至于那个网址。 index.php 决定如何处理 $_GET['page'] ,并包含 first.php 然后 first.php 文件对 $_GET['sub'] 进行处理。等等。
    • 这正是发生的事情以及我正在尝试解决的问题。这是我的问题。
    【解决方案3】:

    当然可以。它被称为递归,包括

    【讨论】:

    • 我用谷歌搜索了它,但找不到一个简单的例子。你知道一个好地方吗?
    • 你是怎么想到这个词的?你甚至不能称之为递归,因为它不包含前一个文件。
    • 我刚刚用代码更新了我的问题。这是一个好的开始吗?
    • 是的,它适用于第一页。到目前为止,我得到了。但我的问题是我现在如何在加载的内容中加载另一个内容。 F.e.我将 second.php 加载到 index.php 中。 second.php 有一个导航到我想包含在 second.php 中的另外三个内容。记住:second.php 只包含没有页眉或页脚的内容。
    • @Melros:只需在您想要的文件中添加另一个包含
    最近更新 更多