如何将链式方法作为同一类中另一个方法的参数传递?

时间:2016-04-20 18:58:11

标签: php oop

我有一个带有一堆链接方法的类。这是一个例子:

class Sum {
    public static $res = [];
    private static $instance = null;

    public static function run() {
        if (self::$instance === null)
            self::$instance = new self;

        return self::$instance;
    }

    public function res() {
        return self::$res;
    }

    public function addTen($int) {
        self::$res = $this->addFour($str) + 6;
        return $this;
    }

    public function addFour($int) {
        self::$res = $int + 4;
        return $this;
    }
}

因此,如果我想调用addTen()方法,我可以这样做:

echo Sum::run()->addFour(5)->res(); // Works, returns 9
echo Sum::run()->addTen(5)->res(); // Doesn't work

上面的代码不起作用,因为链式方法从Sum类返回当前对象。所以我设法通过更改addTen()方法来解决这个问题,所以它在addFour()方法之后调用res()方法,如下所示:

public function addTen($int) {
    self::$res = $this->addFour($str)->res() + 6;
    return $this;
}

在上面的例子中,这是好的,因为只有on方法从addTen()方法内部调用,但是如果我需要从addTen()方法中调用很多其他链式方法呢?我怎么能这样做,res()方法不再需要在每次从类中的另一个链式方法调用之后被调用(有很多" - > res()&#可能变得不可操作34;在课堂上随处叫。)

1 个答案:

答案 0 :(得分:1)

我不知道这门课的任务是什么,但是每个功能手动编写“添加”不会使你的课程适应性强。正如我所指出的那样,你已经使用了一个数组而没有正确链接$ res。由于这是一个总和类,我希望你想要总结链。

所以我重写了你的课程:

<?php

class Sum {
    public static $res = [];
    private static $instance = null;

    public static function run() {
        if (self::$instance === null)
            self::$instance = new self;

        return self::$instance;
    }

    public function res() {
        return array_sum(self::$res);
    }

    public function add($int) {
        self::$res[] = $int;
        return $this;
    }

}
$sum = new Sum();
$x = $sum->add(5)->add(6)->res();
echo $x; // 11

你可以看到它在这里工作: https://3v4l.org/itDHN