8

オブジェクトのメソッドは、同じクラスの別のオブジェクトの保護されたプロパティにアクセスできる必要がありますか?

私はPHPでコーディングしていますが、同じオブジェクトでなくても、オブジェクトの保護されたプロパティに同じクラスのメソッドでアクセスできることを発見しました。

この例では、最初は出力に「3」が表示されます。これは、関数readOtherUserが値に正常にアクセスしたためです。その後、メインプログラムが同じ値にアクセスできなかったため、PHPの致命的なエラーが発生します。 。

<?php

class user
{
protected $property = 3;

public function readOtherUser ()
{
    $otherUser = new user ();
    print $otherUser->property;
}
}

$user = new user ();

$user->readOtherUser ();
print $user->property;

?>

これはPHPのバグですか、それとも意図された動作ですか(そして、この概念を再学習する必要があります…:))(そして事実への参照があります)?他のプログラミング言語ではどのように行われますか?

ありがとう!

4

2 に答える 2

8

これは意図されたものです。同じクラスのプライベートメンバーにアクセスすることも可能です。したがって、修飾子は、オブジェクトごとの修飾子ではなく、クラスごとの修飾子であると考えてください。

この機能を備えている言語はPHPだけではありません。たとえば、Javaにもこれがあります。

于 2009-11-22T13:26:48.630 に答える
2

これは意図された動作です。保護された変数または関数は、同じクラスまたはそのクラスから継承する任意のクラスからアクセスできることを意味します。保護されたメソッドは、クラス内からのみ呼び出すことができます。たとえば、次のように呼び出すことはできません。

$object = new MyClass();
$object->myProtectedFunction();

これにより、エラーが発生します。ただし、定義されたクラス'MyClass'内から、保護された関数を完全に呼び出すことができます。

同じことがvariabelesにも当てはまります。要約:

use PROTECTED on variables and functions when:
 1. outside-code SHOULD NOT access this property or function.
 2. extending classes SHOULD inherit this property or function.
于 2009-11-22T13:25:22.710 に答える