【发布时间】:2011-03-01 14:08:14
【问题描述】:
好的。
我有一个很长很复杂的函数。
它看起来几乎像这样:
<?php
function hello() {
echo 'My Function!' ?>
<ul>
<li> Blablabla </li>
<ul>
(...)
<?php } ?>
这里最大的问题是我无法回应任何内容。
我的函数必须返回它的内容而不是回显或直接输出(它必须是这样,它是一个 Wordpress 短代码,当我回显时 - 内容会显示在页面顶部 - 总是,而不是在我想要它们的地方):
<?php
function hello() {
$output .= 'My Function!';
$output .= '<ul>';
$output .='<li> Blablabla </li>';
$output .='<ul>';
(...)
return $output;
} ?>
我希望这很容易。
现在,真正的问题是:
我有大量的直接输入代码,例如:
?>
<div>
<span>
<p>Smth</p>
<a>smth</a>
</span>
</div>
<?php
到处添加 $output 会破坏漂亮的段落/空白,并且代码变得非常难以阅读和理解(现在所有 HTML 元素都是变量的一部分,所以即使我的 php 编辑器也没有很好地处理它们并将它们着色为 PHP 元素)。
另外,我有很多这样的台词:
<a href="<?php bloginfo('template_directory'); ?>/includes/php/timthumb.php?src=<?php echo $url; ?>&h=<?php if($items=="one") echo 320; elseif($items=="two") echo 230; elseif($items=="three") echo 180; elseif($items=="four") echo 130; ?>&w=<?php if($items=="one") echo 600; elseif($items=="two") echo 420; elseif($items=="three") echo 277; elseif($items=="four") echo 203; ?>" title="<?php the_title(); ?>" class="link">
(是的,这是一行)
而且我完全不知道如何将这些行添加到 $output。
$output .= '<a href="<?php bloginfo('template_directory'); ?>/includes/php/timthumb.php?src=<?php echo $url; ?>&h=<?php if($items=="one") echo 320; elseif($items=="two") echo 230; elseif($items=="three") echo 180; elseif($items=="four") echo 130; ?>&w=<?php if($items=="one") echo 600; elseif($items=="two") echo 420; elseif($items=="three") echo 277; elseif($items=="four") echo 203; ?>" title="<?php the_title(); ?>" class="link"> ';
当然不起作用(即使在 ' 和 " 之前使用 \'s)。
我相信必须有一种更简单的方法来附加所有要返回的代码,但是怎么做呢? 我试过 ob_start();在代码之前并返回 ob_get_clean();之后,但它输出的是简码名称而不是内容。
【问题讨论】:
-
您的实际问题不是您可以或不能输出的冗长解释,而是您的第一行,说明:“我有一个非常长且非常复杂的函数。”函数应该简短易懂。他们应该做一件事。而且它们应该没有像回显内容这样的副作用。试着用简单的英语描述你的函数是做什么的。为每个“and”创建一个新函数并以它的作用命名。将您的代码分解成小块。消除复杂性后,再次查看源代码。
-
@Gordon 你是对的,但你不是。我所有的功能总是做一件事。这是 Wordpress 短代码,它抓取一组项目并根据属性显示它们。有 10 个属性,每个属性大约有 10 个 if 语句。还有 while 循环抓取帖子等。将其分解为较小的函数看起来毫无意义,因为我有大约 100 个短代码,我需要大约 100 个短代码。 10k 个独立的函数来做他们所做的事情。
-
无意冒犯,但这只是进一步证明设计/wordpress 已损坏。
-
@Gordon 好吧,公平地说,这些 Wordpress 功能背后的想法 是为几乎没有技术知识的人提供一个“低技术”脚本界面来定制他们的博客 -模板函数的整个基础都是以这种方式构建的,参见。
the_loop()、the_title()等等……毫无疑问,这仍然是糟糕的设计