PHP链接对象运算符在类中运行

时间:2014-03-11 18:57:24

标签: php

尝试学习OO PHP,但我对某些事感到困惑。我之前使用框架将它们链接在一起 - >在这些函数中调用多个函数或变量。

ex. $variable = $this->query($stmt)->result()->name;

你会如何设置它?

class test{
    public $name;
    public function __construct(){      
        $this->name = 'Jon'; // pretending that Jon is a db call result
    }
    public function change_name($n){
        $this->name = $n; 
    }
    public function get_name(){
        return $this->name;
    }
}
$i = new test();

我该怎么做?或者这完全是不可能的。

$i->change_name('george')->get_name; // as an example

3 个答案:

答案 0 :(得分:3)

当你说"链接"时,你真正的意思是"链接"

在你的例子中

    $ I-> change_name('乔治') - > GET_NAME; //作为一个例子

(!)你有2个错误

1) - > get_name应为 - > get_name(); //它的函数不是属性

2)即使使用 - > get_name(),也不会有效,因为它没有上下文。

以示例:

当你这样做时:     $ i-> change_name(' george')//方法change_name()具有上下文$ i

我们继续:

$i->change_name('george')->get_name() // the method get_name() have the context returned by change name, in your case its nothing because your function change_name return nothing 

如果我们查看你的change_name主体:

public function change_name($n){
    $this->name = $n; 
}

没有返回任何内容,这意味着如果您愿意,此函数将返回无效或无效。

在你的情况下你想要的是返回对象上下文," $ this"

尝试:

public function change_name($n){
    $this->name = $n;
    return $this; 
}

当你做的时候做:

$ i-> change_name(' george') - > get_name()//方法change_name()具有更改名称返回的上下文,现在是其工作

答案 1 :(得分:1)

$this返回change_name()

public function change_name($n){
    $this->name = $n; 
    return $this;
}

答案 2 :(得分:0)

这叫做方法链接。你可以实现它:

我推荐你这个链接:

PHP method chaining?