PHPのアクセス権について、PHPマニュアルを見ていたら、『public function baz(Test $other)』なるメソッドがクラスの中で定義されていたのですが、引数の中身の意味が分からなく、説明も一切なかったので調べてみました。
その引数が出てきた例は下記。
他のオブジェクトからのアクセス権 ¶
同じ型のオブジェクト間では、たとえ同一のインスタンスでなくても お互いの private メンバーや protected メンバーにアクセスすることができます。 これは、そのオブジェクトの内部ではオブジェクトの実装の詳細が既知であるからです。
例3 同じ型のオブジェクトの private メンバーへのアクセス
<?php
class Test
{
private $foo;
public function __construct($foo)
{
$this->foo = $foo;
}
private function bar()
{
echo 'Accessed the private method.';
}
public function baz(Test $other)
{
// private プロパティを変更することができます
$other->foo = 'hello';
var_dump($other->foo);
// private メソッドをコールすることもできます
$other->bar();
}
}
$test = new Test('test');
$test->baz(new Test('other'));
?>
上の例の出力は以下となります。
string(5) "hello" Accessed the private method.
流石はPHPマニュアル、何の説明も無いです。
もうちょい、初学者のことも考えてもらえると助かるんですが・・・。
結論として、「引数$other」の左側に「TEST」を付与していますが、これによって、「引数$other」に渡されるべき引数が「TEST」クラスのオブジェクトに限定されるということらしいです。
『public function baz(Test $other)』は、クラスTestを基にしたオブジェクト名が$otherのインスタンス(オブジェクト)を引数としているってことでしょうか。
⇩ オブジェクト引数について下記サイトが詳しく説明してくれています。
・【 ほでなすPHP 】 PHP5の基本 -> オブジェクト引数のクラス指定
『$test ->baz(new Test( 'other' ));』とこもよく分からんですが、きっと、クラスTestを基にしたオブジェクト名otherというインスタンス(オブジェクト)を引数にしているってことだと思います。
ちなみに『独習PHP 第2版』の説明によると、クラスのインスタンス化(new演算子)は
$変数名 = new クラス名( [引数, ......] )
引数は、オブジェクトを初期化するための情報(オブジェクトに最初にセットしておきたいデータ)です。引数が必要ない場合も( )は省略できません。
引数に何が指定できるのか分からんです・・・。
しっかり読めば説明してくれてるのかもしれませんが。
⇩ いちおう、PHPマニュアルによる関数の引数の説明です
2017年10月21日(土) 追記
Javaを学習した今なら分かりますが、これ、例文が分かりにくいですね。
Testクラスの中で定義してるメソッドの引数にTestクラスのインスタンスを指定してるという、なんともな感じですが。
自クラスで定義してるメソッドの引数に自身のインスタンスを指定してるということは分かりましたが。
実際にどういう時にこういう使い方をするのかが良いのかとかの使いどころの実例が無いのはどうなんでしょうね...