◆ インスタンス自身のメンバ変数じゃなくてもいい
◆ 同じクラスのインスタンスならおっけい 

private 変数は自身のクラスからしかアクセスできないので当然これはエラーです
<?php
class test1{
function method($test_instance){
$test_instance->p = 1;
}
}

class test2{
private $p = 0;
}

$t1 = new test1;
$t2 = new test2;
$t1->method($t2);
var_dump($t2);

Fatal error: Uncaught Error: Cannot access private property test2::$p in -:5


同じクラスでも メソッドを呼び出したインスタンス自身のメンバ変数 ($this を通してアクセスするもの) しかダメなのだと思っていたのですが
<?php
class test{
private $p = 0;
function method($test_instance){
$test_instance->p = 1;
}
static function staticMethod(){
$x = new self;
$x->p = 1;
return $x;
}
}

$t1 = new test;
$t2 = new test;
$t1->method($t2);
var_dump($t1, $t2);

$t3 = test::staticMethod();
var_dump($t3);

これを実行してみると
object(test)#1 (1) {
  ["p":"test":private]=>
  int(0)
}
object(test)#2 (1) {
  ["p":"test":private]=>
  int(1)
}
object(test)#3 (1) {
  ["p":"test":private]=>
  int(1)
}

エラーはなしです

自身のインスタンスだけじゃなく そのクラスのインスタンスであれば操作できるんですね
他の言語もこうなんだっけ?


static メソッドで自身のインスタンスつくって private メンバいじれるのは便利だけど なんか心配になる挙動