可能重复:
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 ....
}
这是完成此任务的正确方法吗?请告诉我这些课程的名称。
答案 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'。
虽然我已经在最后一个方法中返回了对象 - 你完全不需要,只有前面的方法需要链接。