クラスの異なるインスタンスは、互いに他のプライベートメンバー変数を知ることができるようです。PHPのスコープとクラスのインスタンスのやりとり
私は自分の問題を紹介しようとするいくつかのコードを提供しており、私はそれを説明しようとします。
プライベートメンバー変数$hidden
を持つクラスがあります。 modifyPrivateMember
は$hidden
の値を3
に設定します。 accessPrivateMember
はObject
をパラメータとし、はプライベート$hidden
のメンバーにアクセスして値を返します。
コード例:上記のコードの
<?php
// example.php
class Object {
private $hidden;
public function modifyPrivateMember() {
$this->hidden = 3;
}
public function accessPrivateMember(Object $otherObject) {
return $otherObject->hidden;
}
}
$firstObject = new Object;
$firstObject->modifyPrivateMember();
$otherObject = new Object;
echo $otherObject->accessPrivateMember($firstObject);
出力:
$ php example.php
3
オブジェクトのプライベートメンバーは、同じクラスの他のインスタンスにアクセス可能な、なぜ誰も説明できますか?この表向きの範囲違反の正当な理由はありますか?
これまでの回答から、コードが例示した内容が分かりました。私は本当に*なぜ*物事がこのようになっているのかという疑問に対する答えを本当に探しています。可視性がクラスに制限され、オブジェクトではないのはなぜですか?これはどのような利点がありますか? –
私はちょうど今推測していますが、phpはmodifierの動作を含むjavaからの割り当てを借りています。多分Javaは型システムのためにクラスレベルでそれをやる必要があります。 Rubyがインスタンスレベルでそれを実行できる理由を説明しているかもしれません。しかし、再びその憶測。 – MrHus