Какая разница между public
и private
в случае с конструктором PHP-класса и на каких основаниях следует выбирать модификатор доступа для конструктора класса?
Объект класса с public
конструктором может быть создан в любом месте программы через new classname
Объект класса с private
конструктором может быть создан только в пределах методов этого самого класса (например, в статическом методе)
Поэтому private
конструктор используется тогда, когда вы хотите чтобы объекты этого класса создавались только определённым образом из одного или нескольких статических методов этого класса и не могли свободно создаваться во внешнем коде. Например, это необходимо для паттерна одиночка (singleton
)
Относительно упомянутого в комментариях наследования - существует ещё protected
уровень. Конструктор возможно наследовать, но всё ещё невозможно создать объект класса извне класса. И важный момент - наследники могут расширять область видимости метода и это не является нарушением контракта класса и наследования. Т.е. класс наследник может объявить свой конструктор публичным, даже если у базового класса конструктор был private
или protected
. Нередко при этом делается final protected
конструктор, из которого вызывается другой метод, который может переопределить наследник - так сохраняется и возможность выполнить какую-то логику инициализации и гарантировать, что конструктор класса не станет публичным
class foo {
public static function create() {
return new static;
}
final protected function __construct() {
$this->init();
}
protected function init() {}
}
class bar extends foo {
protected function init() {
var_dump(__METHOD__);
}
}
bar::create();
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть скрипт на сервере, который декодирует изображение base64 и загружает на сервер и скрипт, который оптимизирует его после загрузкиХотелось...
когда отправляю запрос на этот php получаю ошибку 500 в php я практический вообще не разбираюсь помогите пожалйуста на этот файл передается пост...
Все-таки мучает меня этот вопрос, может быть кто-то сможет объяснить
Здравствуйтепрошу помощи в написании регулярки для проверки логина при регистрации пользователя