Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是防止html在PHP中混合的好编程模式?_Php_Design Patterns - Fatal编程技术网

什么是防止html在PHP中混合的好编程模式?

什么是防止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:

我目前正在开发一个包含多种类型用户的网站

类型示例: 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: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增加了许多额外的设置,而且很容易出错:)我以前从未见过匿名函数数组,但它对处理不同的情况非常有用!:)