Доброго времени суток помогите пожалуйста кто не будь если не сложно, создал функцию connect в этой функции хочу подключить файл config.php но подключения нет, где я допустил ошибку? PHP: <?php Class Database{ private $link; public function __сonstruct() { $this->connect(); } private function connect() { $config = require_once 'config.php'; $dsn = 'mysql:host='.$config['host'].';dbname='.$config['db_name'].';charset='.$config['charset']; $this->link = new PDO($dsn, $config['username'],$config['password']); return $this; } // Выполняет запрос public function execute($sql) { $sth = $this->link->prepare($sql); return $sth->execute(); } // Получает запрос public function query($sql) { $sth = $this->link->prepare($sql); $sth->execute(); $result =$sth->fetchAll(PDO::FETCH_ASSOC); if($result === false){ return[]; } return $result; } public function setLink($link) { $this->link = $link; return $this; } } $db = new Database(); ?>
Вот config.php <?php return [ 'host' => 'localhost', 'db_name' => 'test', 'username' => 'root', 'password' => ' ', 'charset' => 'utf8' ];
Мне кажется дело не в фале config.php. Так как меняешь название файла на любое другое в браузере нет предупреждения что такого файла не существует.
PHP: <?php namespace My\Database; Class Datab { private $link; public function __construct() { $this->connect(); } private function connect() { $config = require_once 'config.php'; $dsn = 'mysql:host=' . $config['host'] . ';dbname=' . $config['db_name'] . ';charset=' . $config['charset']; $this->link = new \PDO($dsn, $config['username'], $config['password']); return $this; } public function execute($sql, $array) { $sth = $this->link->prepare($sql); return $sth->execute($array); } public function query($sql, $array) { $sth = $this->link->prepare($sql); $sth->execute($array); $result = $sth->fetchAll(\PDO::FETCH_ASSOC); return $result; } } Файл config.php должен лежать в той же папке. Вызываем где нам надо PHP: <?php use My\Database\Datab; $db = new Datab(); @mkramer От такого использования prepare толку 0 А так?
PHP: <?php namespace My\Database; class Datab { protected static $instance; protected $link; protected static function instance() { return static :: $instance ?: ( static :: $instance = ( new static ) -> connect( include 'config.php' ) ); } protected function connect( array $conf ): Datab { $this -> link = new \PDO( sprintf ( 'mysql:host=%s;dbname=%s;charset=%s', $conf['host'], $conf['db_name'], $conf['charset'] ), $conf['username'], $conf['password'] ); return $this; } public static function prepare( string $sql, array $array ) { $s = static :: instance() -> link -> prepare( $sql ); $s -> execute( $array ); return $s; } public static function query( string $sql ) { return static :: instance() -> link -> query( $sql ); } } PHP: Datab :: prepare( 'SELECT * FROM table WHERE name = ?', [ $_POST['name'] ?: '' ] ) -> rowCount(); --- Добавлено --- Глаза радуются ?
Да, солнышко, вы здесь внезапно правы. Не доходит уже ультрафиолетовый блеск нетестируемых синглтонов с лапшекодным смешением ответственностей до моих очей. Ибо иначе бы ввергло меня в пучину нерадивых деяний и нелицеприятных грёз.
@ElisDN, деяний и так пока не видно, сплошное бла бла бла направленное на восхваление себя любимого по средствам уничижения всех и вся. Где же код, который если уж не радует, то хотя бы не колет твой глаз? Опять же не стоит забывать, что подавляющее число вопросов на этом форуме от начинающих программистов и отвечать следует пропорционально их знаниям. Смогёшь?
Причем здесь крупные проекты ? --- Добавлено --- У класса внутреннее создание экземпляра. Последующие вызовы методов, будет использоваться существующий внутренний объект --- Добавлено --- Причем выделюсь, создается и загружается ядро тогда, когда это потребуется и начнется использоваться в самом коде, а не как во всех фреймворках - сначала загружается синглтон ( ядро/подключение к базе/проверка чего прочего основ ) и потом, возможно, наверно этот экземпляр будет использоваться.
Напиши сюда, для данной темы с его проблемами, свой тестируемый код с хорошей архитектурой Я жду, либо свободен. Надоели глупые вопросы без осознанных всех нюансов.
Т.е. от моего вопроса ты слился и еще что то требовать посмел... Если пишешь как 10 лет назад все новички писали, на процедурке, статикой в классах, так кому ты интересен как собеседник?
Твой глупый вопрос с дальнейшим ветвлением диалогов, где нужно расписывать и что - то доказывать, был опущен с учетом конкретного актуального диалога и его кода ( которого я оптимизировал обвертку с глобальной доступностью - ответ и на вторую строку. ). Теперь все понятно и выложишь свой правильный код или продолжишь, что в итоге тебя легче в игнор внести ? --- Добавлено --- Я признаю свои ошибки, если показывают пример на практике "своего деяния" - иначе пафос трепа и только.
https://php.ru/forum/threads/organizacija-koda-shablony-proektirovanija-luchshie-praktiki.68853/ https://php.ru/forum/threads/parse-...e-expecting-function-t_function-or-con.73745/
@ElisDN , @Valick Идеального кода не бывает. Приципиться можно до любого кода. Даже если зайти в рабочий гит профессионала.
Вас что в гугле забанили? У Дмитрия куча репозитариев на гитхабе, смотри не хочу "его код". А насчет Синглтонов, это не они плохие, а вот эти Синглтоны на статике. Глобальная зависимость, что тут непонятного. Даже в любимой книге всех пхп новичков, автор Мэтт Зандсатра, про это черным по белому. Вы, Valick, так любите на всех площадках людей попрекать тем что они книг не читают, вот не ожидал что Мэтта вы не читали...
@Дюран, вам сделать фотку на фоне 4-го издания этой книги? В том то и дело, что я попрекаю, только тех кто сам попрекает причём чаще всего голословно, всем остальным просто советую читать книги и не верить на слово ни мне ни кому бы то ни было, а самому своим умом делать выводы на основе прочитанного. Конкретно в данной теме @ElisDN выказал своё "фи", вот я и спросил "где его не "фи" код", а ходить по гитхабам и копаться в чужом "грязном белье" у меня банально нет времени.