php процедурный с пространством имен vs oop - PullRequest
5 голосов
/ 14 октября 2011

Насколько я понимаю, самое большое преимущество ООП по сравнению с процедурным программированием в PHP - это своего рода разделение имен функций (своего рода пространство имен).

Так что теперь, когда у нас есть пространство имен начиная с версии 5.3, что вы думаете - В большинстве случаев (для небольших и средних веб-сайтов), когда нам нужен быстрый и снова структурированный код, использование пространства имен + процедурное программирование получает значительное преимущество по сравнению с определением и писать в ООП.

Преимущества:

  • структурированы
  • более быстрый код / ​​разработка
  • снова мы можем определить что-то вроде приватных функций в пространстве имен, начиная с "_", зная, что нам не нужно их использовать
  • и т.д ..

Пример кода:

namespace User;

function setPassword ($user_id) {

    $pass = _generatePassword();

    $sql = 'UPDATE `users` SET `password` = '.escape($pass).' WHERE `user_id` = '.escape($user_id);
    $result = mysql_query($sql);


    if (mysql_affected_rows() == 1) return $sql;
    else return $sql;
}

function _generatePassword () {

    $char = '0123456789abcdefghijklmnopqrstuvwxyz';
    $str = '';
    for ($i = 1; $i <= 6; $i++) {
        $str .= $char[mt_rand(0, strlen($char))];
    }

    return $str;
}

Использование:

$user_id = 5;
User\setPassword($user_id);

Я спрашиваю мнение. Я знаю, что это просто стиль для разработчиков, но, может быть, я что-то упустил.

PS. В большинстве случаев (для небольших и средних веб-сайтов) - я имею в виду, когда вы создаете веб-сайты для клиентов, которые в основном разовые, и с небольшими улучшениями в долгосрочной перспективе.

Ответы [ 2 ]

3 голосов
/ 14 октября 2011

Вы думаете о ООП неправильно.Если вы пытаетесь сравнить ООП с процедурными пространствами имен просто как два разных способа организации вашего кода и вызовов функций, тогда, безусловно, пространства имен покажутся более эффективными.

Преимущество ООП заключается не в организации объекта, полного функций,Это просто относится к классам ООП как к большим "утилитарным" классам, полным функций.Преимущество ООП не является организационным.Это совершенно другой способ построения ваших программ, который заставляет вас разбивать код на более мелкие, незаметные объекты.Я использую ООП во всех моих программах PHP, даже для небольших проектов.

Преимущество ООП становится для меня наиболее очевидным при выполнении любого проекта, который обращается к базе данных (что в наши дни довольно хорошо).Я создаю небольшие классы для моделирования каждой таблицы базы данных, а затем получаю доступ к информации в этих таблицах как к объектам.У меня есть некоторые базовые классы, которые я использую во всех своих проектах, которые определяют, как отображать таблицы в объекты, чтобы я больше не печатал и не вставлял команды mysql.Я просто использую объекты, и они наследуют всю необходимую функциональность для вставки, обновления и удаления из базы данных.

Это, безусловно, гораздо более полезно в коде (особенно если вы используете PHP ide, у которого есть завершение кода) длясм. это в коде:

echo "Hello, {$someDataObject->name}!";

Чем это:

echo "Hello, " . $row['name'] . "!";

Разница может быть не очевидна сразу.Оба примера представляют собой одну строку кода для печати столбца таблицы.Но второй пример требует, чтобы я знал имена столбцов в моей голове.В первом примере имена столбцов встроены в классы как свойства.Мой инспектор кода знает все свойства, поэтому, когда я пишу код, он представляет список всех свойств по мере ввода.

Поддерживать занятия легче, чем вы думаете.В зависимости от выбранной вами объектной инфраструктуры существуют сценарии для генерации классов из таблиц и их обновления.И я считаю, что гораздо меньше ошибок и ошибок, чтобы поддерживать мои классы объектов в актуальном состоянии самостоятельно, чем иметь изменения базы данных, нарушающие код, потому что имена столбцов изменились, и тогда я должен обновить эти ссылки на столбцы в десятках мест.Да, есть поиск и замена, но видите ли вы преимущество обновления одного файла для изменения столбца по сравнению с обновлением каждой ссылки на $ row ['some_column']?

Надеюсь, это поможет ответить на ваш вопрос.

1 голос
/ 22 января 2014

Я думаю, что это правильный вопрос.При программировании в стиле ООП, как правило, возникает много накладных расходов по мере увеличения пространства проблем и увеличения базы кода.Справедливо сказать, что для небольших проектов нет никакой реальной разницы между использованием ООП, функционального или процедурного, но в дальнейшем это не так.

Одним из преимуществ, хотя и не единственным, рекламируемым доктриной программирования ООП, является то преимущество, которое дает вам пространство имен.Кроме того, принудительное использование классов вводит другой уровень более тесной связи и некоторые зависимости во многих случаях.Здесь предлагается написать процедурный код, используя только пространства имен, что позволит многократно использовать функции более естественным образом.

Трудно быть более конкретным в общем случае, а примеры представлены в оригинале.В этом вопросе не раскрываются некоторые потенциальные выгоды от отказа от использования классов по указанным причинам.

Некоторые аргументы за неиспользование стиля ООП более сопоставимы с аргументами за и против функциональных языков программирования.Интересный пример, который можно добавить здесь, - это посмотреть на относительно новый язык go, написанный ребятами из google, который идет на шаг дальше и позволяет определять функции отдельно от структур или интерфейсов, используя пакеты в своем собственном пространстве имен.

Если ребята из Google видят некоторые достоинства в подходе, представленном здесь, за мои деньги, это не кажется такой уж плохой вещью, а просто пищей для размышлений.

...