При кодировании и использовании поздней статической привязки в PHP я обнаружил странное поведение. Детский объект, созданный с помощью static()
в своем родительском классе, может обращаться к закрытым методам своего родителя.PHP статическое связывание не работает правильно
Вот пример:
class Attachment
{
public static function createFromFile($file)
{
$attachment = new static();
echo get_class($attachment) . PHP_EOL;
$attachment->loadFromFile($file);
}
private function loadFromFile($file)
{
echo 'attachment';
}
}
class PictureAttachment extends Attachment
{
//...
}
PictureAttachment::createFromFile('example.txt');
Выход:
PictureAttachment
attachment
Является ли это правильное поведение?
Для дальнейшего уточнения: видимость работы на уровне класса не на уровне объектов. –