Php 陷入常规,需要帮助突破到下一个层次
我正在一个简陋的网站上工作,用我平庸的自学PHP技能,当前的界面结构如下:Php 陷入常规,需要帮助突破到下一个层次,php,code-organization,Php,Code Organization,我正在一个简陋的网站上工作,用我平庸的自学PHP技能,当前的界面结构如下: <?php if (A) { $output = someFunc(A); } else if (B) { $output = anotherFunc(B); } else if (C) { $output = yetAnotherFunc(C); } else { $output = 'default stuff'; } ?> <html templ
<?php
if (A) {
$output = someFunc(A);
} else if (B) {
$output = anotherFunc(B);
} else if (C) {
$output = yetAnotherFunc(C);
} else {
$output = 'default stuff';
}
?>
<html template top half>
<?php echo $output; ?>
</html template bottom half>
一开始,它运行正常,看起来组织得很好,但是所需的功能已经增加了10倍,而且它正在迅速变成一个无法维护、令人尴尬的混乱局面,我不知道如何摆脱它
我觉得在每种情况下调用的函数都写得相当好,并且重点突出,但是我不知道如何处理用户与创建布局和处理返回的函数之间的中间步骤
我觉得MVC是一种解决方案?但我很难理解如何从这里到那里
对于上述代码可能引发的任何头痛或不愉快的记忆,我深表歉意。谢谢你的时间。你似乎已经像很多人那样开始了,一个持续增长的重大if和/或案例陈述。所有这些“如果”检查都需要时间。MVC无疑是一个很好的方法,但是有很多方法可以实现它。我还建议查看前端控制器设计模式,它通常与MVC一起使用 改变操作方式的一种方法是使用关联数组切换到定义的“操作”列表。并将函数更改为includes。然后可以有多个函数、变量和其他处理代码
$actions = array(
'A'=>'action1.php',
'B'=>'action2.php',
'C'=>'action3.php',
'default'=>'action_default.php'
);
if ( isset( $actions[ $_GET['action'] ] ) ) {
include( $actions[ $_GET['action'] ] );
} else {
include( $actions['default'] );
}
然后,您的“索引”文件只是一个路由工具,这几乎是前端控制器的概念。一般性建议:您看过吗?我发现它是一个相当有用的模板引擎。这可能需要一些学习,但从长远来看可能是值得的。在任何面向对象的代码中,每当看到一系列if/else或case语句时,通常最好由对象层次结构来处理,而不是由一堆if/else/else来处理 在您的特定情况下,您可能会为A、B和C使用3个不同的类,只需调用一个$obj->doit()方法。A、 B、C和C都有doit()方法的不同实现 如果你想摆脱常规,我建议你读一本关于设计模式的书。以下是PHP中设计模式的一些示例: 对于这种特殊类型的问题,您可能特别感兴趣的模式有:
- 战略李>
- 指挥部
- 工厂
- Command:结合上面提到的策略模式的思想,您的函数中执行实际工作的样板代码更少
- 工厂。您可以使用工厂方法为所面临的情况生成适当类型的命令
下面的maschka建议使用Smarty,这是一个合理的想法。根据应用程序的不同,更好的方法可能是使用MVC框架。如果您致力于坚持使用PHP,那么我推荐CakePHP,并在这方面取得了巨大成功。它可以帮助您以一种非常好的方式布局您的代码,并帮助您避免麻烦。+1对于“上述代码可能引发的任何头痛或不愉快记忆”:我很好奇您为什么要使用
include
而不是require
。这背后有什么原因吗?如果文件丢失,require将发出致命错误,包括警告。