在类函数中使用html有什么问题吗?我在DOM中调用它,所以我不需要返回一个字符串.
public function the_contact_table(){
?>
<div>
some html here
</div>
<?php
}
Run Code Online (Sandbox Code Playgroud)
另外,当我需要字符串时,我使用这种方法?有更好的方法还是相对标准?
public function get_single(){
ob_start();?>
<div class='staff-member single'>
<div class='col left'>
<div class='thumbnail'>
thumbnail
</div>
<?php $this->the_contact_table(); ?>
</div>
<div class='col right'>
</div>
</div>
<?php
$content = ob_get_contents();
ob_end_clean();
return $content;
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
我应该解释为什么我这样做.我正在制作一个Wordpress插件,并希望控制一个帖子类型输出.所以我使用的是如下过滤器
public function filter_single($content){
global $post;
if ($post->post_type == 'staff-member') {
$sm = new JM_Staff_Member($post);
$content = $sm->get_single();
}
return $content;
}
Run Code Online (Sandbox Code Playgroud)
所以你可以看到,我必须将一个字符串返回到wordpress核心
如果要将长字符串存储到变量中,则应该使用HEREDOC而不是输出缓冲。它看起来像这样:
$content = <<<EOD
content here
EOD;
Run Code Online (Sandbox Code Playgroud)
EOD可以是任何东西,但请注意两件重要的事情:
如果您使用 PHP >= 5.3,那么您应该使用 NOWDOC,它不会解析文档内的变量(除非您需要它)。与NOWDOC 语法的唯一不同之处在于哨兵用引号引起来:
$content = <<<'EOD'
content here
EOD;
Run Code Online (Sandbox Code Playgroud)
我远离输出缓冲的原因是它阻止服务器对发送到客户端的数据进行分块。这意味着请求看起来会更慢,因为内容不是逐步发送到客户端并显示,而是被迫一次性发送。输出缓冲是针对不小心运行的情况的一种解决方案echo方法,或者是针对某些有特定需要的应用程序的工具。我还想象,如果您使用输出缓冲(因为它涉及函数调用)而不是将字符串HEREDOCing到变量中或包含视图,那么执行时间会受到影响。
现在要回答是否合适的问题,我想说的是,在 MVC 应用程序中,所有 HTML 和其他内容都应包含在其自己的视图中。然后控制器可以调用视图来显示自身,而不必担心了解显示视图所涉及的代码。您仍然可以将信息(如标题、作者、标签数组等)传递给视图,但这里的目标是将内容与逻辑分离。
也就是说,Wordpress 模板和代码一开始看起来相当草率,并且松散地甚至根本没有实现 MVC,因此如果为此创建视图的工作量太大,我会说这种草率符合 WP 的风格。