Да, self - это тот класс, в котором этот self написан. А static - это класс, в котором этот static прямо сейчас выполняется.
<?php
class A
{
public function foo(): string
{
return self::class;
}
public function bar(): string
{
return static::class;
}
}
class B extends A
{
}
$b = new B();
var_dump($b->foo()); // A
var_dump($b->bar()); // B
Есть альтернативы, причем более правильные. Service locator, fabric, dependency injection - почитай про эти паттерны. Синглтон это самое простое, что может быть использовано для такого случая.
Спасибо за урок! С каждым последующим всё интереснее :)
Прочитал на хабре статью, что помимо "приватизации" конструктора еще необходимо закрыть магические методы clone(), sleep(), __wakeup(). Насколько это важно?
То ли дело в том, что этот шаблон на самом деле очень простой, и соответственно урок показался простым, то ли есть результаты в прокачивании серого вещества... Поменял подход к обучению)) Теперь перед уроком стараюсь использовать дополнительные материалы. Предварительно почитав про этот паттерн в разных источниках, получилось самостоятельно и достаточно быстро сделать все то, что дано в уроке - не читая его. Вобщем, предварительно изучая материал по теме урока, осознание решения приходит само, по крайней мере пока относительно текущего учебного "проекта". Может это и мнимое ощущение, но значительно улучшает освоение вопроса. Получается заметно медленнее в целом, но лучше запоминается и здорово мотивирует.
Отлично! На данном этапе уже можно и даже нужно использовать несколько источников =) Учиться по одному источнику я рекомендую только самым-самым начинающим, это позволяет им не создавать кашу в голове.
нужно ли использовать то же самое например для контроллеров? Иначе получается при многократных переходах по ссылкам на сайте создается много контроллеров со своими переменными $view, и потом они просто висят где-то. или php как то сам от них динамически избавляется?
А я все хотел спросить почему изначально мы не сделали класс Db абстрактным ведь по сути в коде не было особой необходимости создавать объекты класс Db, а можно было просто обращаться к методам класса, теперь когда использовали паттерн Синглтон стало ясно почему делалось именно так а не иначе.
У меня на главной показывает count 3, а на любом из постов cout 2.
Включи xdebug и поставь брейкпоинт на строке, где происходит увеличение счетчика. Узнаешь, почему так.
Когда мы пишем self::$instance = new self();
self() - мы подразумеваем, __construct данного класса?
Да, self - это тот класс, в котором этот self написан. А static - это класс, в котором этот static прямо сейчас выполняется.
В уроке "Класс для работы с базой данных" настройки находятся в src/settings.php, в этом уроке они в
src/MyProject/Services/settings.php
В коде src/MyProject/Services/Db.php последнем у меня выдавало ошибку, что settings.php не найден.
поменял на
$dbOptions = (require DIR . '/../../settings.php')['db'];
и все заработало. Так что там ошибка (если я ничего не перепутал).
Всегда ли стоит использовать данный паттерн, если в коде нужно постоянно открывать несколько соединений в разных местах? Или есть альтернативы?
Есть альтернативы, причем более правильные. Service locator, fabric, dependency injection - почитай про эти паттерны. Синглтон это самое простое, что может быть использовано для такого случая.
А в каком уроке мы создавали класс ActiveRecordEntity от которого наследуем. Вроде иду по шагам и по очереди, не пропускаю.
Это точно было раньше. Поищи сам)
Точно есть в 19-ом , пока боролся с одной проблемой пропустил другую))
Классика жанра ))
Спасибо за урок! С каждым последующим всё интереснее :)
Прочитал на хабре статью, что помимо "приватизации" конструктора еще необходимо закрыть магические методы clone(), sleep(), __wakeup(). Насколько это важно?
Ну это уже защита от самого себя)
То ли дело в том, что этот шаблон на самом деле очень простой, и соответственно урок показался простым, то ли есть результаты в прокачивании серого вещества... Поменял подход к обучению)) Теперь перед уроком стараюсь использовать дополнительные материалы. Предварительно почитав про этот паттерн в разных источниках, получилось самостоятельно и достаточно быстро сделать все то, что дано в уроке - не читая его. Вобщем, предварительно изучая материал по теме урока, осознание решения приходит само, по крайней мере пока относительно текущего учебного "проекта". Может это и мнимое ощущение, но значительно улучшает освоение вопроса. Получается заметно медленнее в целом, но лучше запоминается и здорово мотивирует.
Отлично! На данном этапе уже можно и даже нужно использовать несколько источников =) Учиться по одному источнику я рекомендую только самым-самым начинающим, это позволяет им не создавать кашу в голове.
И правда лёгкий паттерн)
Ну так, вы думали шучу что ли)
нужно ли использовать то же самое например для контроллеров? Иначе получается при многократных переходах по ссылкам на сайте создается много контроллеров со своими переменными $view, и потом они просто висят где-то. или php как то сам от них динамически избавляется?
Прочитайте второй урок курса для начинающих)
Где висят?) Подскажите, если нашли
Артем, какой из известных фреймфорков наиболее схож с тем, что мы разрабатываем на курсе?
Пожалуй Yii и Laravel
А я все хотел спросить почему изначально мы не сделали класс Db абстрактным ведь по сути в коде не было особой необходимости создавать объекты класс Db, а можно было просто обращаться к методам класса, теперь когда использовали паттерн Синглтон стало ясно почему делалось именно так а не иначе.
А где обработка ошибок PDO подключения? ))