在PHP中编码和使用后期静态绑定时,我发现了一些奇怪的行为.static()在其父类中创建的子对象可以访问其父类的私有方法.
这是一个例子:
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');
Run Code Online (Sandbox Code Playgroud)
输出:
PictureAttachment
attachment
Run Code Online (Sandbox Code Playgroud)
这是正确的行为吗?