PHP续功能

时间:2014-10-07 03:38:50

标签: php function class

您好我怎样才能创建一个类对象,并且可以这样做:

<?php
    $someClass = new SomeClass;
    $sum = $someClass->addValues(1,22)->sumValues();
    echo $sum; // to give me 23
?>

很抱歉!这就是我的意思,我刚才有了这个想法,所以 - 对不起,邮件。

<?php 
    class SomeClass {
        private $values = array();
        public function addValue(){
            $this->values = func_get_args();
            return $this;
        }

        public function getSum(){
            $sum = array_sum($this->values);
            return $sum;
        }

    }

    $SomeClass = new SomeClass;
    $result = $SomeClass->addValue(1,22,44,51)->getSum();
    echo $result;
?>

对于所有回答的人 - 抱歉,这只是一个例子,所以我问如何做到这一点,以帮助我不与我争论这是否是一种矫枉过正。我需要这样做的方法。不像我会使用相同的代码。

2 个答案:

答案 0 :(得分:1)

您找到的术语是“方法链”,请参阅wikipedia

上的此链接

基本上你需要编写一个返回$this

的方法
<?php
    class Foo{
        protected $message;
        function a($foo){
            $this->message .= $foo;
            return $this;
        }
        function b($foo){
            $this->message .= $foo;
            return $this;
        }
        function print_message(){
            echo $this->message;
        }
    }

    $foo = new Foo()
    $foo->a("Hello")->b("World");
    $foo->print_message();
    //output: 'HelloWorld'

?>

答案 1 :(得分:0)

如果你只想总结一个数字列表,那么很容易就这样做:

$sum = array_sum(array(1, 22));

如果您正在尝试学习如何使用类/对象,那么您可以像这样实现:

class SomeClass {
    protected $values = array();
    public function addValues() {
        $this->values = array_merge($this->values, func_get_args());
        return $this;
    }
    public function sum() {
        return array_sum($this->values);
    }
}
$someClass = new SomeClass;
echo $someClass->addValues(1, 22)->sum(); // 23