记一次php的链式操作

196 阅读1分钟

class Order
{
    public function chain($a, $b, $c, $d, $e)
    {
        $r = $this->A($a, function () use ($b, $c, $d, $e) {
            $r = $this->B($b, function () use ($c, $d, $e) {
                $r = $this->C($c, function () use ($d, $e) {
                    $r = $this->D($d, function () use ($e) {
                        $r = $this->E($e, function () {});
                        if (!$r) {
                            //回滚D
                            return false;
                        }
                        return true;
                    });
                    if (!$r) {
                        //回滚C
                        return false;
                    }
                    return true;
                });
                if (!$r) {
                    //回滚B
                    return false;
                }
                return true;
            });
            if (!$r) {
                //回滚A
                return false;
            }
            return true;
        });
        if (!$r) {
            return false;
        }
        return true;
    }

    public function A($a, $callback) {
        $r = false;
        //调用服务 $r = A::do($a);
        if(!$r) {
            return false;
        }
        return $callback;
    }


    public function B($b, $callback) {
        $r = false;
        //调用服务 $r = B::do($b);
        if(!$r) {
            return false;
        }
        return $callback;
    }

    public function C($c, $callback) {
        $r = false;
        //调用服务 $r = C::do($c);
        if(!$r) {
            return false;
        }
        return $callback;
    }

    public function D($d, $callback) {
        $r = false;
        //调用服务 $r = D::do($d);
        if(!$r) {
            return false;
        }
        return $callback;
    }

    public function E($e, $callback) {
        $r = false;
        //调用服务 $r = E::do($e);
        if(!$r) {
            return false;
        }
        return $callback;
    }
}