0

myVarメソッドの関数の中で使用しようとしています。私はすでに追加しようとしましglobalたが、まだ何もしていません。これはおそらく基本的なものですが、見つけられないようです。

class myClass{
  
  public $myVar;

  public function myFunction() {
  
    function myInnerFunction() {
      //how do I use this variable here
      echo $this->myVar; 
    }
  }
}

使用しようとするたびに$this、「Using $this when not in object context in...」というエラーが表示されます。

4

5 に答える 5

3

使用する必要があります$this->myVar

PHP ドキュメント - 基本を参照してください。

<?php
class SimpleClass
{
    // property declaration
    public $var = 'a default value';

    // method declaration
    public function displayVar() {
        echo $this->var;
    }
}
?>

疑似変数$thisは、メソッドがオブジェクト コンテキスト内から呼び出されたときに使用できます。$this は、呼び出し元オブジェクト (通常はメソッドが属するオブジェクト) への参照です

アップデート:

新しいコード サンプルでmyInnerFunctionは、​​ はネストされた関数myFunctionであり、メソッドが呼び出されるまでアクセスできません。myFunctionメソッドが呼び出されると、はスコープmyInnerFunctionの一部になります。global

多分これはあなたが探しているものです:

 class myClass{

  public $myVar;

  public function myFunction() {

  }

  function myInnerFunction() {
    //how do I use this variable here
    echo $this->myVar; 
  }

}
于 2013-07-10T16:44:44.283 に答える
1

のようなmyInnerFunction内部関数は、クラスのメンバー関数内で定義されている場合でも、スコープ内で常にグローバルです。別の同様の例については、この質問を参照してください

したがって、PHP にとって、以下は (ほぼ) 同等です。

class myClass{

  public $myVar;

  public function myFunction() {

    function myInnerFunction() {
      //how do I use this variable here
      echo $this->myVar; 
    }
  }
}

class myClass{

  public $myVar;

  public function myFunction() {

  }
}

function myInnerFunction() {
   //how do I use this variable here
   echo $this->myVar; 
}

うまくいけば、2 番目の例$thisで、 が の範囲内にない理由が示されmyInnerFunctionます。解決策は、変数をパラメータとして関数に渡すことです。

于 2013-07-10T16:59:24.640 に答える
0

内部関数に引数として渡します。

于 2013-07-10T16:57:17.103 に答える
0

使用できますReflectionProperty

$prop = new ReflectionProperty("SimpleClass", 'var');

完全な例:

class myClass{

  public $myVar;

  public function myFunction() {

    function myInnerFunction() {
      //how do I use this variable here
      $prop = new ReflectionProperty("SimpleClass", 'myVar');
    }
  }
}
于 2013-07-10T16:59:37.560 に答える