Кстати с return $this->title = 'new title'; неважно: return self::$_instance; или return self::$_instance(); а без return второй вариант при вызове дает ошибку
Ну извини, чтобы присвоить что-то нестатическому полю, нужно создать экземпляр и вызвать метод у него. Конечно, если ты как статику вызываешь, там никакого $this и близко нету, поскольку экземпляр не создан. В JavaScript страшнее. А пыхе как раз таки синтаксис практически плюсовый с небольшими дополнениями, классы весьма предсказуемы. У меня после плюсов неделя ушла на изучение php. Особенно до последнего стандарта, где это уже стало на что-то похоже, но всё равно мозг взрывает. А то, что ты предлагаешь, не сработает ни в Java, ни в плюсах, ни в шарпе (хотя последний я поверхностно просматривал)
блин, как же ты смог обойтись тут без интерфейса. как по мне, так интерфейс тут просится сам собой. просто невозможно устоять перед соблзаном.
По мне так страшнее и багофичнее статические классы без объектов чем объекты без классов Мне после изучения ооп в JavaScript стало понятнее ооп в пхп
PHP: Class DB extends \PDO{ static $instance = null; protected static $options = null; public function __construct(string $dsn, string $user, string $passwd){ $this->connect($dsn, $user, $passwd); } public static function instance(\stdClass $arguments): DB{ if (!isset($arguments->options)) throw new \Exception("No parameters passed to DB contructor"); self::$options = $arguments->options; $obj = new DB(...$arguments->options); self::$instance = \Core\Container::as_instance($obj, $arguments); return self::$instance; } public function connect($dsn, string $user = "", string $passwd = ""): void{ $options = array( PDO::ATTR_PERSISTENT => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ); try { parent::__construct($dsn, $user, $passwd, $options); } catch (\PDOException $e) { throw new \PDOException($e->getMessage(), $e->getCode()); } return; } public function reconnect(): void{ if (!empty(self::$options)) $this->connect(...self::$options); return; } }
В блоке катч выкидывать исключения? Там вообще-то должна обрабатываться ситуация если в трай возникло исключение.
А почему нет? Другое дело, это имеет смысл, если до этого была какая-то обработка, типа логирования, а тут можно просто не ловить, оно само раскрутится
А так что хуже? PHP: catch (Throwable $e) { echo 'Выброшено исключение: ', $e->getMessage(), $e->getCode(), "\n"; } просто смысл наверное поймать и продолжить код
Тестируй, смотри документацию, там нет такого чтобы в параметре throw new Exception был вызов $e->getMessage(), там может быть текст который потом эта функция получит при возникновении исключения.
Смотри главное не ошибись. Иначе мир разрушиться. Сервер сломается. А сам ты перейдешь на темную сторону какого нибудь nodejs или не дай бог самого ruby
если планируется использовать несколько типов баз даных (mysqli, sqlite) то второй лучше)) + интерфейс)) а если это проект который будет работать только на к примеру mysqli тогда и первый вариант зашибись))