1

実行時にクラスを拡張することは可能で、私はそれを少し遊んでいましたが、それから私はこれに遭遇しました。それは私には奇妙です。プライベート関数で新しい変数を定義すると、それはパブリック変数になります。少なくとも保護されるべきではありませんか?

これをテストするために使用したコードは次のとおりです。

class FooBar {

public function FooBar() {
    $this->t();
}

public function createVariable() {
    $this->NewVar();
}

private function NewVar() {
    $this->iam = "Hello you!";
}

private function t() {
    $this->T = "ballad";
    return $this->T;
}

}

$fb = new FooBar();
echo $fb->T;
echo "<br/>";
var_dump($fb);
$fb->createVariable();
echo $fb->iam;
echo "<br/>";
var_dump($fb);
echo "<br/>";
$fb->outer = "okay";
echo $fb->outer;

さらに、実行時にクラスを拡張することが可能であるため、これが不可能なのはなぜですか。

function foo() {
    private $this->anewvar = 0; //private is illegal.
}
4

1 に答える 1

2

PHPでは、変数を明示的に定義しなくても、いつでも変数をインスタンス化できます。

ただし、変数を明示的に定義していないため、PHPは変数のスコープを設定する方法を認識しておらず、変数を指定する方法もありません。したがって、可能な限り最も安全なオプションを使用して、変数を公開します。

プライベートにスコープを設定する場合は、クラス定義でプライベート変数として定義します。

于 2013-01-09T12:36:33.093 に答える