【问题标题】:Include HTML inside partial and inside function在部分函数和内部函数中包含 HTML
【发布时间】:2017-01-06 07:50:09
【问题描述】:

我正在为 Word Press 创建一些小部件,但也许这是标准的 PHP 问题,因为它与某些 MVC 模式有关。我有一些 HTML 需要在页面上输出,但 HTML 现在是我的内部函数,我想将它转移到部分,因为将来可能会有更多的 HTML,如果我让它像这样会有很多意大利面条代码。这是我现在所拥有的

class motractrucks extends WP_Widget{
  function widget($args, $instance, $defaults){
  echo '<p>'.$value1.'<p>'; 
  echo '<p>'.$value2.'<p>'; 
  echo '<p>'.$value3.'<p>'; 
  echo '<p>'.$value4.'<p>'; 
  echo '<p>'.$value5.'<p>'; 
  echo '<p>'.$value6.'<p>';
 }
}

这只是一个简单的例子,我已经很容易地修改了函数,你可以理解我需要什么,我想做类似的事情,但是如何在该视图中传递函数内部的值?

class motractrucks extends WP_Widget{
  function widget($args, $instance, $defaults){
   include 'partials/userValues.php';
 }
}

并将所有值传递给该部分,任何好的想法和最佳代码实践都会很好。

【问题讨论】:

    标签: php function include


    【解决方案1】:

    这个问题中与 PHP 相关的部分是variable scope。 PHP 函数具有本地范围。因此,在这些函数中使用的变量默认被认为是局部变量。除非您通过 global 关键字将变量从全局范围显式导入函数的本地范围,否则它是本地的。在您的示例中,这些变量都是未定义的。

    另外,在函数中使用 echo 从来都不是好的做法,但我不能具体谈谈您代码的 WordPress 方面,因为我对 WordPress 不太熟悉。

    函数应该将输入作为参数,应该返回值作为输出。这通常是您认为良好的做法。

    function foo($var1, $var2, $var3) {
        return <<<HTML
            <p>$var1</p>
            <p>$var2</p>
            <p>$var3</p>
    HTML;
    }
    

    至于包含用于模板的文件,这在 PHP 中通常是可以的。当您在函数内部执行这些包含时,包含它们的范围会变得更容易,因为include 会考虑范围。

    假设您的 partials/userValues.php 文件看起来像这样......

        <p><?=$var1?></p>
        <p><?=$var2?></p>
        <p><?=$var3?></p>
    

    如果你想在你的函数中包含它,你可以。您还可以将输出缓冲与 ob_start()ob_get_clean() 等函数一起使用,将输出写入缓冲区并从函数返回,而不是直接打印到标准输出。

    function foo($var1, $var2, $var3) {
        ob_start(); // start the output buffer first
        include 'partials/userValues.php'; // include inherits the variable scope
        $output = ob_get_clean(); // close the buffer and store it in $output
        return $output; // return it to the caller
    }
    

    【讨论】:

      猜你喜欢
      • 2012-02-20
      • 1970-01-01
      • 2021-03-21
      • 2013-10-04
      • 1970-01-01
      • 2012-08-18
      • 2020-02-08
      • 1970-01-01
      • 2019-06-24
      相关资源
      最近更新 更多