Php 在级联中运行类方法
我有一个系统,它被设计成做一种级联——在前一个条件成功时获得调用的方法序列 下面的代码就是一个例子,我认为这不是一个最好的实践,所以如果我能得到一些重构的建议,可能会使用一个设计模式或者一个不同于这个系统的设计模式,那就太好了Php 在级联中运行类方法,php,oop,design-patterns,Php,Oop,Design Patterns,我有一个系统,它被设计成做一种级联——在前一个条件成功时获得调用的方法序列 下面的代码就是一个例子,我认为这不是一个最好的实践,所以如果我能得到一些重构的建议,可能会使用一个设计模式或者一个不同于这个系统的设计模式,那就太好了 <?php class Model { public function isOk() { return true; } } class OtherClass { public function isOk()
<?php
class Model
{
public function isOk()
{
return true;
}
}
class OtherClass
{
public function isOk()
{
return true;
}
}
class AnotherClass
{
public function verifies()
{
return true;
}
}
class Sequence
{
public function fire()
{
$model = new Model();
if($model->isOk()) {
$otherclass = new OtherClass();
if($otherclass->isOk()) {
$anotherclass = new AnotherClass();
if($anotherclass->verifies()) {
echo "We're done with the sequence.";
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
}
$sequence = new Sequence();
echo $sequence->fire();
?>
我会避免深入嵌套if/else语句以增强可读性。一种方法是使用提前归还:
class Test1
{
public function isOk()
{
echo 'Test1';
return true;
}
}
class Test2
{
public function isOk()
{
echo 'Test2';
return true;
}
}
class Sequence
{
public function fire()
{
$test1 = new Test1();
if (!$test1->isOk()) {
return false;
}
$test2 = new Test2();
if (!$test2->isOk()) {
return false;
}
echo "We're done with the sequence.";
return true;
}
}
如果您需要它更动态,您可以使用或
谢谢第二个例子看起来更清晰,但我在每个序列中都有一些“东西”,所以第一个例子可能是选项。我会看看是否有人提出了其他的解决方案,并会接受一个它会更好地解决我的问题。谢谢您是否考虑过将命令与责任链模式一起使用?嗨,Henrique,谢谢您的建议,但在这种情况下,责任链模式不符合目的。为什么不呢?你能解释一下吗?首先,我看不出有什么原因……我们的目的是,调用的类方法必须返回true,才能继续下面的操作。false表示总体失败,脚本执行必须终止。从我对CR d模式的理解来看,情况并非如此,但如果我没有正确理解,请纠正我。
class Sequence
{
protected $sequence = array(
array('Test1', 'isOk'),
array('Test2', 'isOk'),
);
public function fire()
{
foreach ($this->sequence as $callback) {
if (!call_user_func(array(new $callback[0], $callback[1]))) {
return false;
}
}
echo "We're done with the sequence.";
return true;
}
}