Есть ли существенная разница в использовании объектно-ориентированного подхода над процедурным подходом при реализации mysql в php? На веб-сайте php о mysqli_query
( http://www.php.net/manual/en/mysqli.query.php ) он предоставляет пример того и другого, и я просто хочу знать, есть ли существенная разница в производительности, или просто знать, когда использовать каждый из них.
Ответ на который лучше , «это зависит». Как и в любом случае, существует множество различных подходов, и вы также должны иметь в виду, что код, который использует объекты, необязательно объектно ориентирован, но все еще может быть написан процедурно. В том же ключе код, который не использует объекты, все еще может быть модульным.
Тем не менее, я хотел бы использовать класс mysqli
. Нет существенной разницы в производительности. Вероятно, вы не поймете некоторых преимуществ использования класса DB, например упрощенного полиморфизма, поэтому мой единственный аргумент в пользу использования класса – это то, что я предпочитаю синтаксис. Однако, вместо того, чтобы напрямую использовать mysqli
я бы, вероятно, рекомендовал вам продлить или создать его. Вы можете сделать это только с помощью класса.
class DB extends mysqli { public function __construct() { parent::__construct($_SERVER['DB_HOST'], $_SERVER['DB_USER'], $_SERVER['DB_PASS']); } }
Это очень мелкий пример.
Пример полиморфизма, о котором я говорил выше, был бы примерно таким:
class User implements DAO { private $db; public function __construct(DB $db) { $this->db = $db; } } //Testing code is simplified compared to using it in production class TestDB extends DB {} new User(new TestDB); new User(new DB);
Кстати, я категорически предпочитаю PDO
над mysqli
Поскольку вы стажер, было бы целесообразно выяснить, кто будет поддерживать код в будущем.
Нет, нет никакой разницы.
Но вы упускаете из виду более важную вещь: никакие сырые функции API mysqi не должны использоваться в коде приложения, ни ООП, ни процедуре.
Существует одна вещь, неизвестная пользователям PHP: вызовы API не предназначены для использования как есть. Их нужно обернуть в какую-то библиотеку. Без него mysqli – это просто боль в спине, ему требуется в два раза больше кода, чем старый добрый mysql ext.
Таким образом, имеет значение, если вы используете такой слой, но не имеет значения, написано ли оно с использованием процедурного или ООП внутри.
Но эта библиотека должна быть построена в форме класса. Другого пути нет.