2016-10-16 42 views
0

我试着在一个对象上调用多个函数。但我认为我的语法失败了。你能纠正我吗?在对象上调用多个方法?

$objMetaDaten->setStrTitle('test') 
     ->setStrBeschreibung('test') 
     ->setStrUeberschrift('test') 
     ->setStrCanonical('test') 
     ->setStrRobots(MetaDaten::INDEX); 
+3

为此,每个方法必须返回'$ this'。看** [这里](http://stackoverflow.com/questions/3724112/php-method-chaining)**,方法链接。 – YvesLeBorg

+0

显示你的错误信息 – scaisEdge

+1

如果'setStrTitle('test')'返回下一个类,我的意思是(setStrBeschreibung('test'))'的对象,那么这将发生。 –

回答

3

你需要的是一种叫做流畅制定者将调用对象的setter方法作为对传统空隙后返回对象setter方法类似下面

Class A{ 
    private $name; 
    private $id; 

    public function setName($name) { 
     $this–>name = $name; 
     return $this; 
    } 

    public function getName() { 
    return $this–>name; 
    } 

    public function setId($id) { 
     $this–>id = $id; 
     return $this; 
    } 

    public function getId() { 
     return $this–>id; 
    } 
} 

所以,你可以然后说

$test = new A(); 

$test->setId(1)->setName('Fredrick'); 
-2

我认为你看起来像这样,这是一个非常基本的方法。

class Test{ 
    function test(){ 
     return 'Hi!'; 
    } 
} 

class Test2{ 
    function test_2(){ 
     return new Test(); 
    } 
} 

class Test3{ 
    function test_3(){ 
     return new Test2(); 
    } 
} 

$obj = new Test3(); 
echo $obj->test_3()->test_2()->test(); 

或者,你可以在一个类中做到这一点喜欢 -

class Test{ 
    private $num; 
    function test(){ 
     return 'Hi! your number is: '.$this->num; 
    } 

    function test_2($mul){ 
     $this->num *= $mul; 
     return $this; 
    } 

    function test_3($add){ 
     $this->num = $add; 
     return $this; 
    } 
} 

$obj = new Test(); 
echo $obj->test_3(50)->test_2(2)->test(); 
相关问题