Различия в процедурных и объектно-ориентированных реализациях mysql в php? [закрыто]
Есть ли существенная разница в использовании объектно-ориентированного подхода по сравнению с процедурным подходом при реализации mysql в php? На веб-сайте php о mysqli_query
, (http://www.php.net/manual/en/mysqli .query.php ), это пример того и другого, и я просто хочу знать, есть ли какая-либо существенная разница в производительности, или просто знать, когда использовать каждый из них.
3 answers
Ответ на вопрос, какой из них лучше, звучит так: "это зависит". Как и в любом другом случае, существует множество различных подходов, и вы также должны иметь в виду, что код, использующий объекты, не обязательно объектно-ориентирован, но все же может быть написан процедурно. В том же духе код, который не использует объекты, все еще может быть модульным.
Однако я бы предпочел использовать класс mysqli
каждый раз. Существенной разницы в производительности нет. Вы, вероятно, не поймете некоторых из преимуществ использования класса БД, таких как упрощенный полиморфизм, поэтому мой единственный аргумент в пользу использования класса заключается в том, что я предпочитаю синтаксис. Однако вместо того, чтобы использовать 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 - это просто боль в спине, для этого требуется в 2 раза больше кода, чем старый добрый mysql ext.
Итак, имеет значение, используете ли вы такой слой, но не имеет значения, написан ли он с использованием процедурного или ООП внутри.
Тем не менее, эта библиотека должна быть построена в форме класса. Другого выхода просто нет.