我正在为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';
}
}
并将所有值传递给该部分,任何好主意和最佳代码实践都会很好。
答案 0 :(得分:0)
这个问题与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
}