Подтвердить что ты не робот

ООП стоит использовать в PHP?

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

Что еще более важно, было бы хорошо обернуть материал внутри класса и использовать статические функции, или было бы лучше просто иметь много функций с префиксом ex: wp_function().

4b9b3361

Ответ 1

Да, почти всегда полезно использовать ООП. Это связано с тем, что ООП является стилем кодирования, а стили кодирования большей частью легко переносятся на языки.

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

Нет, использование процедурных функций для доступа к ним, вероятно, не очень хорошая идея. Это связано с тем, что вам, вероятно, придется сделать что-то подобное для поддержания состояния.

function myFunc()
{
    global $class;
    $class->doMethod();
}

function myFunc2()
{
    global $class;
    $class->doMethod2();
}

Это плохая идея, поскольку она создает тонну глобального состояния.

Ответ 2

Если причина, по которой вы беспокоитесь об использовании OO с PHP, это скорость, не бойтесь: PHP - это медленный язык. Если вы делаете то, что достаточно для обработки процессора, для потери скорости при использовании объектов в материи, вы вообще не должны использовать PHP.

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

Ответ 3

Те же аргументы в отношении производительности были сделаны о Objective C и С++ в тот же день. И ответ на эту проблему состоял в том, чтобы воспользоваться доступной памятью и вычислительной мощностью, которая постоянно становится все больше, лучше и быстрее.

Да, для OO требуется больше ресурсов для запуска. Но преимущества использования OO перевешивают стоимость аппаратного обеспечения $$ (что может быть незначительным) для поддержки приложений OO.

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

Имейте в виду, что даже если PHP, возможно, не самая быстрая платформа (например, Java, пинает ее прикладом), PHP используется для питания некоторых из наиболее тяжелых веб-сайтов в Интернете: Facebook.

Если у вас есть другие сомнения относительно PHP и OO, просто посмотрите на Zend и Magento (на основе Zend). Magento - ОЧЕНЬ ресурсоемкая платформа, использование памяти может превышать 36 МБ на экземпляр. Однако сама платформа способна обрабатывать миллионы хитов. Это связано с тем, что правильно сконфигурированная серверная среда со здоровой подачей аппаратных ресурсов делает все преимущества использования OO далеко за пределами стоимости самого сервера. Но в мире кластеризованных компьютеров НЕ использовать доступную вам вычислительную мощность и память (ответственно) - IMHO - клиническое безумие.

Ответ 4

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

Ответ 5

Я категорически не согласен с ответом Chacha102.

Правильный ответ на этот вопрос заполнит несколько книг - не обращая внимания на 20-строчный пост здесь.

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

Что касается пригодности PHP для OO и процедурного кодирования, то, конечно, корни языка находятся в последнем (но обратите внимание, что как Java, так и ASP являются гибридными, а не истинными OO-языками).

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

Утверждать, что вы всегда должны писать процедурный код, потому что он будет работать быстрее, чем OO-код:

1) не обязательно верно 2) полностью игнорирует относительную стоимость времени разработки и стоимости оборудования

было бы хорошо обернуть материал внутри класса и использовать статические функции

Учитывая, что пространства имен теперь доступны в PHP, это действительно грязный способ избежать конфликтов пространства имен, а не то, что я рекомендовал бы.

С.

Ответ 7

На самом деле нет идеального ответа, поскольку он зависит от множества неизвестных переменных, а затем он не должен быть все или ничего.

Например, если вы разделили приложение на модель MVC, возможно, ваша модель будет OO, но сохраните контроллер более упрощенно процедурно.

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

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

Никто не может дать вам правильные советы, не понимая проект, который вы принимаете.

Тем не менее, если ваша единственная проблема - скорость, то OO будет немного медленнее. И есть много подлых вещей, которые вы можете сделать даже в процедурном PHP, чтобы имитировать некоторые из выигрышей OO. Но если вы не возьмете огромный проект, добавленные накладные расходы никогда не будут значительными. И к тому времени, когда у вас будет огромный проект, плюсы OO могут перевесить минусы своих накладных расходов.

Ответ 8

Да, когда ваше приложение растет.. (и это будет), это сэкономит вам много часов разочарования. И повторив себя (копируя вставляя код повсюду)..:)

Ответ 9

Мне это было любопытно. К сожалению, после того, как я изменил свой код с процедурного на oop, я провел несколько тестов и не заранее.

Вот эталонный код.

class game{
  function maxp($val){
    return max(0,pow($val,0.5));        
  }
}

$game = new game;

for($i=0;$i<100000;$i++){
  $game->maxp(100);
  //game::maxp(100);
}

Результаты ООП варьировались от 0,13 до 0,2 секунды;

Процедурные результаты варьировались от 0,08 до 0,1 секунды.

Результаты оставались неизменными в течение хорошего периода времени.

Я призываю вас запустить свои собственные тесты.

php 5.4.3