php Переопределение конструктра и области видимости: Fatal error: Access level to ::__construct() must be public (as in class .

Следующий ниже пример работает в php 7.2, но не работает в предыдущих версиях (изменение области видимости конструтора):

<?php

/**
 * Наследник: Синглтон
 */
abstract class User extends Model
{
    public final static function get()
    {
        static $instance = null; // статическая переменная
        if (null === $instance) { // проверка существования
            $instance = new static();
        }
        return $instance;
    }

    protected function __construct()
    {
        parent::__construct();
    }
}

/**
 * Родитель: Обычный класс
 */
class Model 
{
    public function __construct($data = null) 
    {}
}

Таким образом, php 7.2 позволяет делать конструктор наследника более закрытым, чем конструктор родителя.

Key Words for FKN + antitotal forum (CS VSU):