2012-02-20 12 views
3

を呼び出します:上記の例では、コンテンツを取得するPHP:連鎖法が可能な重複

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


PHP method chaining?

私は時折、いくつかのPHPアプリケーションは、そのようなクラスを使用してご覧ください選択したファイルの名前を返します(例のみ)。私はあなたを求めることを決めた前

まあ、私はこれを行うことができますどのように、私はこれを試してみました:

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 .... 

} 

が正しい方法は、このタスクを達成するためにということですか?そして、これらのクラスが呼ばれていることを教えてください。

+3

Googleでは 'php'のメソッドチェインを行っています。基本的には、 '$ this'を連鎖したメソッドで返すだけです:)この例はちょうどミスリーディングですが、selectファイルはコンテキスト(この名前のファイル名)に基づいて別のオブジェクトを生成するための単なるファクトです。メソッドが任意のタイプのオブジェクトを返す場合、それをチェーンすることができます。 –

+1

ここでは、スタックオーバーフロー時に、絵文字、インターネットスラング、太字のテキストを使用してフォームを控えてください。また、[FAQ](http://stackoverflow.com/faq) –

+0

を読むことを忘れないように私はこれのための電車の難破船が好きです。 – phpmeh

答えて

11

これはメソッド連鎖と呼ばれます。このquestionをご覧ください。ここで

はあなたが達成しようとしている何ができる方法です:私たちはselectFileで$thisを返す

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(); 

お知らせ、これはその上にチェーンに別の方法を、私たちを可能にします。

+0

だから私は_Object_自体を返す必要があります! ありがとう、たくさん!あなたはとても寛大です! **お大事に :)** – Innogen

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(); 

希望もエコー「メソッド - メソッドB」を。

私は最後のメソッドでオブジェクトを返してきましたが、厳密にはそうする必要はありませんでした。

+4

したがって、キーはオブジェクト自体を返すことです! ありがとう! – Innogen