2011-09-25 50 views
0

これで何が起こっているのか分かりません。私はFunc2からFunc1を呼び出す必要があり、オブジェクトの内部にFunc1のパラメータを渡す必要があります。phpのクラス内の関数内で関数を呼び出す

class MyClass { 

     function Func1($a) { 
       return $a; 
     } 
     function Func2() { 
       echo $this->Func1($a); 
     } 
} 

$c = new MyClass(); 

$c->Func1('parametr'); // prints: 1 

$c->Func2(); 
+2

あなたの質問であなたが主張するものと、コードを実行するとどうなるかは次のとおりです:http://codepad.org/quUn635i。あなたの質問とコードを明確にしてください。 – Gordon

+1

これはもう少し文脈が必要だと思います。 Func2とは何を考えていますか? Func2はある種のオブジェクトをFunc1に渡すことを想定しているようですが、この例ではわかりません。 –

答えて

2

パラメータをクラス変数(プロパティ)として設定するのはどうですか?

class MyClass { 

     private $a; 

     function Func1($a) { 
       $this->a = $a; 
       return $a; 
     } 
     function Func2() { 
       echo $this->Func1($this->a); 
     } 
} 

これは、最初にFunc1を呼び出すときにパラメータを設定します。 Func2を呼び出すたびに、パラメータが使用されます。また、このようにパラメータを渡すスキップすることができます

class MyClass { 

     private $a; 

     function Func1($a = null) { 
       if ($a === null) { 
        return $this->a; 
       } else {     
        $this->a = $a; 
        return $a; 
       } 
     } 

     function Func2() { 
       echo $this->Func1(); 
     } 
} 

すなわちあなたが任意のパラメータなしにはfunc1を呼び出す場合、それが格納された変数(プロパティ)を使用し、それ以外の場合は、指定されたパラメータを使用しています。これは、あなたの正確なニーズに応じてさまざまな方法で使用できます。

0

命令:

を返します$ this-エコー>関数func1($ A)。

が間違っています:変数$ aはFunc2の範囲外です。 $ aはFunc1のパラメータなので、Func1の範囲はintです。

1)あなたはグローバル変数を持つことができます。

0

あなたは、迅速な垣間見ることがPHP http://php.net/manual/en/language.variables.scope.php
で変数のスコープについての詳細をお読みください。それらにアクセスするには、そのグローバル変数にアクセスする必要がある関数でキーワードglobalを使用する
2)関数のスコープ内でのみ使用できるローカル変数を持つことができます。
3)変数への参照を渡すことができます。私はあなたが本当のもこのようなものに慣れる示唆

(プライベート、パブリック、保護、静的)あなたは別の種類のオブジェクトの内部変数を持つことができます)、他の機能/スコープ
4にアクセス可能となります。

あなたのコードについては、問題は明らかです。 Func2では$aはローカル変数であるため、$this->Func1($a)に渡されるときは未定義です。あなたのコード例が示唆するように、クラスプロパティprivate $aを導入し、それを使用することができます。例:

class X { 
    private $a; 
    function set($val){ 
     $this->a = $val; 
    } 
    function get(){ 
     return $this->a; 
    } 
    function doSomethingWithA(){ 
     $this->set($this->get() * 2); 
    } 
} 
関連する問題