Мне любопытно, почему это разрешено, когда вы можете вызывать и успешно выполнять закрытый метод для объекта из-за пределов области объекта, если вы делаете вызов из класса того же типа.
Мне кажется, что вызов частного метода из общедоступной области не удовлетворяет критериям частного метода, так почему это разрешено как в PHP, так и в Java?
<?php
class A
{
public function publicMethod ()
{
$obj = new static;
$obj->privateMethod ();
}
private function privateMethod ()
{
echo 'why does this execute?';
}
}
$obj = new A;
$obj->publicMethod ();
Объекты одного типа будут иметь доступ друг к другу как к закрытым, так и к защищенным элементам, даже если они не совпадают. Это связано с тем, что конкретные детали реализации уже известны внутри этих объектов.
— Visiblity, Руководство по PHP
Частный модификатор Определяет, что вы вызываете свойство или метод в локальной области. Под этим я подразумеваю тот же класс.
Хотя его собственный класс является единственным вызывающим, вы можете использовать его в публичном методе и затем вызывать этот публичный метод вне локальной области (класс владельца)