PHP:链接方法调用

时间:2012-02-20 22:06:33

标签: php oop class object method-chaining

  

可能重复:
  PHP method chaining?

我偶尔会看到一些php应用程序使用这样的类:

$Obj = new Obj();
$Obj->selectFile('datafile.ext')->getDATA();

上面的例子获取所选文件的内容然后返回它们(只是一个例子);

好吧,在我决定问你怎么做之前,我试过这个:

class Someclass {
    public function selectFile( $filename  ) { 
       $callAclass = new AnotherClass( $filename );
       return $callAclass;
    }

    // Other functions ...
}

class AnotherClass {
    protected $file_name;

    public function __construct ( $filename ) { $this->file_name = $filename; }
    public function getDATA ( ) {
        $data = file_get_contents( $this->file_name );
        return $data;

    } 

    // funcs , funcs, funcs ....

}

这是完成此任务的正确方法吗?请告诉我这些课程的名称。

2 个答案:

答案 0 :(得分:11)

它被称为方法链。在SO上看一下这个question

这是你可以做的事情:

class File 
{
    protected $_fileName;

    public function selectFile($filename) 
    { 
        $this->_fileName = $filename; 
        return $this;
    }

    public function getData()
    {
        return file_get_contents($this->_fileName);
    }
}


$file = new File();
echo $file->selectFile('hello.txt')->getData();

注意我们在selectFile中返回$this,这使我们能够将另一个方法链接到它上面。

答案 1 :(得分:3)

上面的例子(第一个)叫做链接。这是一个常规课程:

class a_class
{

    public function method_a()
    {
        echo 'method a';
    }

    public function method_b()
    {
        echo ' - method b';
    }

}

你会打电话给这样的人:

$class = new a_class();

$class->method_a();
$class->method_b();

哪个会回应'方法a - 方法b'。现在要链接它们,你将返回方法中的对象:

class a_class
{

    public function method_a()
    {
        echo 'method a';
        return $this;
    }

    public function method_b()
    {
        echo ' - method b';
        return $this;
    }

}

你会打电话给这样的人:

$class = new a_class();

$class->method_a()->method_b();

这也会回应'方法a - 方法b'。

虽然我已经在最后一个方法中返回了对象 - 你完全不需要,只有前面的方法需要链接。