Различия в процедурных и объектно-ориентированных реализациях mysql в php? [закрыто]


Есть ли существенная разница в использовании объектно-ориентированного подхода по сравнению с процедурным подходом при реализации mysql в php? На веб-сайте php о mysqli_query, (http://www.php.net/manual/en/mysqli .query.php ), это пример того и другого, и я просто хочу знать, есть ли какая-либо существенная разница в производительности, или просто знать, когда использовать каждый из них.

Author: Marcel Korpel, 2013-06-22

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

 3
Author: Explosion Pills, 2013-06-22 15:26:24

Поскольку вы стажер, было бы целесообразно выяснить, кто будет поддерживать код в будущем.

  1. Никого в компании.Идите с ООП, если вас это устраивает, так как ООП - это текущая практика.
  2. В Доме. Следуйте текущей практике, надеюсь, ООП
 0
Author: david strachan, 2013-06-22 19:22:13

Нет, никакой разницы нет.

Но вы упускаете из виду более важную вещь: в коде приложения не должны использоваться необработанные функции API mysqi, ни ООП, ни процедурные.

Пользователям PHP неизвестна одна вещь: вызовы API не предназначены для использования как есть. Они должны быть завернуты в какую-то библиотеку. Без этого mysqli - это просто боль в спине, для этого требуется в 2 раза больше кода, чем старый добрый mysql ext.

Итак, имеет значение, используете ли вы такой слой, но не имеет значения, написан ли он с использованием процедурного или ООП внутри.

Тем не менее, эта библиотека должна быть построена в форме класса. Другого выхода просто нет.

 -4
Author: Your Common Sense, 2013-06-22 15:30:17