是有什么毛病,使用一类函数内部HTML? 我把它的DOM,所以我并不需要返回的字符串。
public function the_contact_table(){
?>
<div>
some html here
</div>
<?php
}
此外,当我需要的字符串我用这个方法? 有没有更好的办法,或者这是比较标准的?
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;
}
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;
}
所以你可以看到,我必须在一个字符串返回给WordPress的核心
你应该用HEREDOC如果你想长字符串存储到一个变量,而不是输出缓冲。 它看起来像这样:
$content = <<<EOD
content here
EOD;
EOD
可以是任何东西,但要注意以下两点:
- 它不能在它前面的任何空白,它必须是在它自己的行
- 它不应该是可以在你的内容中找到字符串
如果你正在使用PHP> = 5.3,那么你应该使用NOWDOC,它不分析的文档里面的变量(除非你需要这个)。 唯一能与NOWDOC的语法不同的是,前哨用引号括起来:
$content = <<<'EOD'
content here
EOD;
为什么我会从输出缓冲流浪远的原因是,它阻止服务器分块发送到客户端的数据。 这意味着,请求会显得比较慢的原因,而不是内容正在逐步发送到客户端和显示,它被强制为一次全部送出。 输出缓冲是用于情形一劈当功能不慎echo
数据,而不是返回它或者用于与特定需要它的某些应用程序的工具的。 我还想象,你会采取执行时间一击,如果你使用的输出缓冲(因为它涉及到函数调用)与HEREDOCing串入一个变量或包括视图。
现在回答有关它是否合适的问题,我要说的是,在MVC应用程序的所有HTML和其他内容应包含自己的视野内。 然后控制器可以调用一个视图中显示本身不必担心知道参与显示视图的代码。 您还可以通过信息(如标签标题,作者,阵列等)的意见,但这里的目标是分离的逻辑内容。
这就是说,WordPress的模板和代码看起来很马虎开始与和松散的,如果不是在所有实现了MVC,所以如果它的工作太多了,为此创建的看法,我想说的草率将适合与WP的风格。
这不是关于你放置实际上什么是“意见”的PHP类文件内疏远前端开发人员的事实,一个很好的做法。 这是我的一个最大的问题时,我一般使用PHP刚开始,是我想要动态创建的类中的内容。 这是一个伟大的想法,但要做到这一点的方式,让你的团队的许多成员一起尽可能顺利工作;]。
你或许应该有所谓的“工作人员成员的single.php”一个单独的文件里面的内容,然后您可以在您的函数调用
public function get_single(){
ob_start();
require_once('views/staff-member-single.php');
$content = ob_get_contents();
ob_end_clean();
return $content;
}
你会重构是一个可重用的方法一般了,所以它会看起来像一点点..
public function get_single()
{
$string = $this->render_view_as_string('satff-member-single');
return $string;
}
public function render_view($view)
{
require('views/'.$view.'.php');
}
public function render_view_as_string($view)
{
ob_start();
$this->render_view($view);
$content = ob_get_contents();
ob_end_clean();
return $content;
}
我认为这是使用PHP只为应用和传输一些数据的逻辑视图层(模板引擎)很好的做法。 按照这个也有一些像MVC模式。