0

変数の呼び出し方について質問です。

Jsでは$A = $this->Aの中に書けば;の中を通り抜けるB()ことができました。しかし、PHPではこの方法はうまくいかないようです。$this->A$AC()

関数変数を指定せずに C() 内で $this-A を読み取る方法を教えてください。

class X {

    function B(){
        function C(){
           $this->A;  // Can not call A here
           $A; // No work either

        }
        $A = $this->A; // 

        $this->A; // Can call A here
    }

    private $A;
}

これはGlobal $A 、PHP の関数内の外部から変数を取得するものです。

ただし、グローバルの場合、ここでのグローバルとは、クラス内にないスクリプト全体を意味します。

アドバイスありがとうございます。

4

2 に答える 2

1

Svenが言ったように、関数内の関数は悪いですが、関数内で非機能スコープ変数を公開するためにこれを行うこともできることを無視しています

class X {

    function B(){
        $A = $this->A; //
        function C(){
           global $A; // No work either
        }
        $this->A; // Can call A here
    }

    private $A;
}

コメントから編集:

class X { 

    public $inputvar; 
    public $outputvar; 

    public function B($changeinput) { 
        $this->inputvar = $changeinput; 
    } 

    public function C($secondinput) { 
        $this->outputvar = $this->inputvar." == ".$secondinput; 
    } 

    public function return_var() { 
        return $this->outputvar; 
    }
}

$testclass = new X(); 

$testclass->B("test input"); 
$testclass->C("second input"); 
$testclass->inputvar = "BLAAH"; 

echo $testclass->return_var();
于 2013-01-23T08:25:35.453 に答える
1

関数内で関数を定義することはできません。避けてください。悪いことです! 関数はスコープに制限されません。関数は常にグローバルです。

最初の実行では機能しますが、そのようなコードの実行は関数を定義するだけで (以前の呼び出しでは使用できません)、次の呼び出しで「再定義された関数エラー」でクラッシュします。

これを知っていると、あなたのコードは、実際にはクラスの外にあるグローバル関数「C」を定義することになり、プライベート プロパティにアクセスできなくなります。

于 2013-01-23T08:17:29.817 に答える