【问题标题】:PHP include inside of a variablePHP包含在变量中
【发布时间】:2011-05-23 04:52:54
【问题描述】:

我有一个控制页面输出的函数:

$page = "<div class='media-title'><h2>{$title}</h2></div><div class='media-image'>{$image}</div><div class='media-desc'>{$desc}</div>";

我想在$page 变量中定义的html 中包含一个文件“box.php”。我试过这个:

$page = "<div class='media-title'><h2>{$title}</h2></div><div class='media-image'>{$image}</div><div class="inlinebox">" . include("box.php"); . "</div><div class='media-desc'>{$desc}</div>";

...但它没有用。如何将 php 包含在变量中?

【问题讨论】:

    标签: php function variables include


    【解决方案1】:

    如何将 php 包含在变量中?

    # hello.php
    <?php
      return "Hello, World!";
    ?>
    
    # file.php
    $var = include('hello.php');
    echo $var;
    

    不过,我通常会避免这样的事情。

    【讨论】:

    • 2 个问题:1) 这如何回答我的问题?它没有告诉我如何将该包含语句放入变量中。 2) 你为什么要避免这样的事情?
    • @mattz:实际上这确实回答了这个问题,只要想想你看到了什么......他是 echo 包含。
    • @Stephen,但我可以像我的问题那样在变量定义中这样做吗?当我这样做时,我得到一个错误:Parse error: syntax error, unexpected T_ECHO in...
    • @mattz:我已经更新了答案,使其更明显地适用于变量赋值。做这样的事情从根本上来说并没有什么问题,但是很容易使包含的文件依赖于全局或本地范围的数据。一般来说,您最好使用稍微完善的系统,该系统可以处理发送替换占位符的模板参数等。
    【解决方案2】:

    来自php.net

    // put this somewhere in your main file, outside the
    // current function that contains $page
    function get_include_contents($filename) {
        if (is_file($filename)) {
            ob_start();
            include $filename;
            $contents = ob_get_contents();
            ob_end_clean();
            return $contents;
        }
        return false;
    }
    
    // put this inside your current function
    $string = get_include_contents('box.php');
    $page  = '<div class="media-title"><h2>{$title}</h2></div>';
    $page .= '<div class="media-image">{$image}</div>';
    $page .= '<div class="inlinebox">' . $string . '</div>';
    $page .= '<div class="media-desc">{$desc}</div>';
    

    【讨论】:

    • 这个功能是真的吗? D:+1
    • 我不知道该怎么做,$page 变量已经在函数内部了。
    • 希望 cmets 现在为您阐明问题。
    • 工作完美 :) 感谢您的时间和努力
    【解决方案3】:

    编辑:

    不知道这是否有用,但我认为包含一个文件来获取一段 HTML 不是一个好的选择。它不可扩展。您可以尝试使用 MVC 之类的东西。你可以让你的控制器渲染你想要的内容。

    $view = $controler->getElement('box');
    
    $page = "<div class='media-title'><h2>{$title}</h2></div><div class='media-image'>{$image}</div><div class="inlinebox">" . $view . "</div><div class='media-desc'>{$desc}</div>";
    

    尝试解耦你的代码。

    我建议你看看一些 MVC 框架,在我看来,最好的是 CakePHP。

    【讨论】:

    • 我同意你对 MVC 的看法,尤其是 CakePHP 很棒。但在小型项目中(我想快速完成工作并继续进行酷项目),我会使用包含 HTML ......所有这些,看起来 OP 正在使用模板系统,因此这不是一个小型项目,因此 MVC 肯定会有所帮助,因此您会获得 +1。
    • 感谢您的回复,但我认为这有点过头了。我敢肯定这是一个很好的方法,但我不知道你所说的一半是什么:)
    • 哈哈,好的。这是一个很好的结论。我同意你的观点,对于小型项目使用框架不是一个好的决定。但是,将事情“组织起来”是件好事。我一直在寻找一个小型路由框架,但是没有找到。然后,我为这种情况编写了自己的代码。对“常规”事物进行一次编码很重要,然后重用这些事物。
    • @mattz:也许不是今天,也许不是明天,但你应该阅读 MVC。它会改变你的编码方式。
    • 首字母缩略词 nitpick:如果您的控制器正在“渲染”某些东西,那么它就不是“MVC”(或者实际上是 PMVC)。那就匹配MVP吧。 (模型-视图-演示者)
    【解决方案4】:

    首先,不要在语句中使用分号。
    其次,将 include 语句括在括号中。

    $page = "<div class='media-title'><h2>{$title}</h2></div>
    <div class='media-image'>{$image}</div><div class="inlinebox">" . 
    (include "box.php") . "</div><div class='media-desc'>{$desc}</div>";
    

    最后:在“box.php”文件中,您需要执行以下操作:

    <?php
    ob_start();
    
    // your code goes here
    
    return ob_get_clean();
    

    编辑:关于在函数竞赛之外调用 return 的一些信息:PHP Manual - Return

    【讨论】:

    • 我试过了,但没有任何回报。为了测试它,我把&lt;?php ob_start(); echo "Testing"; return ob_get_clean(); ?&gt; 作为我的box.php 的内容,它没有做任何事情。我删除了 ob_start 和 ob_clean,它输出了 4 次“测试”这个词。在标题中出现两次,一次在应有的位置上方,一次在应有的位置下方。
    猜你喜欢
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2013-12-18
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    相关资源
    最近更新 更多