2012-03-22 6 views
0

私はこのクラスがオブジェクトにインスタンス化された後に__constructパラメータを渡すことはできますか?

class Search 
{ 
    public function search($for, $regEx, $flag) //I would like this to be the constructor 
    { 
     // logic here 
     return $this; 
    } 
} 

様なコードスニペットを有しそしてI有し試行は、オブジェクトを使用するために、後でより、そこからオブジェクトを作成する別のクラス。

class MyClass 
{ 
    public function start() 
    { 
     $this->search = new Search(); 
    } 

    public function load() 
    { 
     $this->search($for, $regEx, $flag); 
    } 
} 

私の質問は、それはそれにパラメータを与えるTHEN最初のオブジェクトを作成することは可能ですか?

私はこの

$this->search($params); 
// I have my methods chained, so I could use it in one line like 
// $this->search($params)->hasResults(); 

if ($this->search->hasResults()) { 
    echo 'found stuff'; 
} else { 
    echo 'didn't find anything'; 
} 

ように私はそれが、今設定した方法をオブジェクトを使用したいので、私はこのようにそれを使用する必要があり、私はこれを回避するいくつかの方法があります知っているが、私は唯一頼みます

$this->search->search($params); 

if ($this->search->hasResults()) { 
    echo 'found stuff'; 
} else { 
    echo 'didn't find anything'; 
} 

私はロジックを行いsearch()というメソッドを持っている、と私は私の命名に冗長になりたくないも、私はメソッドの名前を変更したいです。

私は、私は自分自身を導入しようとしています。同時にとても

$search = $this->search->search($params);

その後、

$search->hasResults();

のような変数を渡すことができ、視覚的な魅力の正気を保つために別の方法を知っています新しいOOPの概念を学び、それらから学ぶ。物事を参考にする必要がありますか?いくつかの種類の魔方法を設定していますか?

答えて

0

カプセル化の概念が壊れているので、これまでのanwsersができることを示していますが、私はそれを使用しませんでした。あなたが望むものを達成するための適切な方法は、このようにして、次の

class Search 
{ 
    public function __constructor($for='', $regEx='', $flag='') 
    { 
     $this->Setup($for, $regEx, $flag); 
    } 

    public function Setup($for, $regEx, $flag) 
    { 
     //assign params 
     //clear last result search 

     //chain 
     return $this; 
    } 

public function search() 
{ 
    // logic here 
    return $this; 
} 
} 

で、オブジェクトを再利用することができますし、カプセル化を壊すことなく、コンストラクタでのparamsを持っています。

0

はい、できます。

class Example { 
    public $any; 
    function __counstruct($parameters,$some_text) { 
    $this->any=$some_text; 
    return $this->any; 
    } 
} 

あなたは、コンストラクタを呼び出すことができます。

は、以下の例を参照してください

$obj = new Example (true,'hello'); 
echo $obj->any; 
$obj->__construct(true,'bye-bye'); 
echo $obj->any; 
0

は、はい、それは可能である

<?php 
class a{ 
    public $a = 5; 

    public function __construct($var){ 
     $this->a = $var; 
    } 
} 

$delta = new a(10); 
echo $delta->a."\n"; 
$delta->__construct(15); 
echo $delta->a."\n"; 

出力は次のようになります。

10 15 
私は私がに search()方法を設定し、今もちろんこの

$this->test->search($params); 
$this->test->search->hasResults(); 

Iを使用することができ、そこからこの

public function __call($name, $params) 
{ 
    $call = ucfirst($name); 
    $this->$name = new $call($params); 
} 

よう__call()マジックメソッドを使用して欲しかった視覚的なコーディングを作成することができました

+0

私はコンストラクタを直接呼び出すことができます??? – Eli

+0

上記のコードを実行して確認してください。それはPHPの5.3.xバージョンで動作します – neeraj

+0

それはあなたのために働いたのですか? – neeraj

0

クラスコンストラクタ

関連する問題