什么是防止html在PHP中混合的好编程模式?
我目前正在开发一个包含多种类型用户的网站 类型示例: a型、b型、c型 所有类型都可以使用不同的权限做不同的事情。 我现在正在做什么;例如,在导航中:什么是防止html在PHP中混合的好编程模式?,php,design-patterns,Php,Design Patterns,我目前正在开发一个包含多种类型用户的网站 类型示例: a型、b型、c型 所有类型都可以使用不同的权限做不同的事情。 我现在正在做什么;例如,在导航中: <?php if($user_type == "a"){ ?> <ul> <li><a href="javascript:void(0);">You can see this</a></li> <li><a href="javascript:
<?php
if($user_type == "a"){
?>
<ul>
<li><a href="javascript:void(0);">You can see this</a></li>
<li><a href="javascript:void(0);">And this</a></li>
<li><a href="javascript:void(0);">also this</a></li>
</ul>
<?php
}elseif($user_type == "b"){
?>
<ul>
<li><a href="javascript:void(0);">You can see this</a></li>
<li><a href="javascript:void(0);">also this</a></li>
</ul>
<?php
}elseif($user_type == "c"){
?>
<ul>
<li><a href="javascript:void(0);">You can see this</a></li>
</ul>
<?php
}
?>
对于他们拥有不同权利的每个元素
这看起来是否更好
有没有人举过一个设计/编程模式的例子,我可以用它来防止if-else和html与php混合
谢谢:)你做这件事的方式没有问题。不过我更喜欢使用这种语法
<?php if($user_type == "a"): ?>
<ul>
<li><a href="javascript:void(0);">You can see this</a></li>
<li><a href="javascript:void(0);">And this</a></li>
<li><a href="javascript:void(0);">also this</a></li>
</ul>
<?php elseif($user_type == "b"): ?>
<ul>
<li><a href="javascript:void(0);">You can see this</a></li>
<li><a href="javascript:void(0);">also this</a></li>
</ul>
<?php elseif($user_type == "c"): ?>
<ul>
<li><a href="javascript:void(0);">You can see this</a></li>
</ul>
<?php endif; ?>
我认为它在模板中看起来更好,在更高、更抽象的层次上,您可以使用MVC(模型-视图-控制器模式),但这是太多的工作了 在您的案例中,一种不将PHP和HTML像那样混合的简单方法是:
<?php
$users = array(
"a" => '
<ul>
<li><a href="javascript:void(0);">You can see this</a></li>
<li><a href="javascript:void(0);">And this</a></li>
<li><a href="javascript:void(0);">also this</a></li>
</ul>
',
"b" => '
<ul>
<li><a href="javascript:void(0);">You can see this</a></li>
<li><a href="javascript:void(0);">also this</a></li>
</ul>',
"c" => '
<ul>
<li><a href="javascript:void(0);">You can see this</a></li>
</ul>
'
);
echo $users[$user_type];
?>
虽然您所做的并没有错——虽然很混乱——但基本上您在这里使用PHP作为预处理器,这是可以的。上面的代码只是一种更清晰的方式来查看您编写的内容 如果您有更复杂的逻辑,可以将每个代码块包装在一个函数中,例如:
<?php
$blocks = array(
'a' => function () { echo 'aaaaaaa'; },
'b' => function () { for ($i=0; $i<5; ++$i) { echo '<div>bbbb</div>'; } },
'c' => function () { var_dump($_SESSION); }
);
$blocks[$user_type]();
?>
PHP是一种模板语言,因此我建议使用includes。上面显示的内容看起来还行。只要PHP代码只检查条件,事情就没那么糟了。当在HTML片段之间执行额外的逻辑时,事情就变得麻烦了。你到底在做MVC吗?如果是,那么控制器应该知道它是什么类型的用户,然后调用适当的视图。如果不使用MVC,那么如果$user\u type根本没有设置,或者如果值与您的不同,那么建议使用回退选项。@cartalot您是否有一个示例(或示例链接)在MVC模式中执行此操作?基本上,如果您有一个用户是管理员,那么该管理员将能够执行其他用户无法执行的操作。因此,您将有一个管理员“控制器”,它在“模型”中调用与管理员相关的方法,然后html的显示在“视图”中,因此html页面或视图无法确定用户是否合格。该视图没有“责任”,非常简单。我建议很多免费教程,比如这里是我个人更喜欢他的解决方案。回显html让我不高兴。而且,mvc几乎没有额外的工作。是的,我也曾经讨厌回显html,因为引用和转义等等。然后我发现关于echo和MVC增加了许多额外的设置,而且很容易出错:)我以前从未见过匿名函数数组,但它对处理不同的情况非常有用!:)