просте пояснення PHP OOP проти процедурного?


106

Я хотів би вивчити PHP і хочу отримати уявлення про OOP і процедурному. Я читав деякі інші блоги та підручники про OOP vs Procedural, але досі не можу зрозуміти підхід.

OOP проти процедурного

  1. Якому мені слід навчитися?
  2. У чому різниця в коді? які наслідки?
  3. Як рамки PHP можуть допомогти в підході до ООП? (Я хотів би дізнатися CodeIgniter)
  4. Чи потрібні рамкові процедури?

Мені дуже хочеться знати різницю коду обох, моє розуміння OOP - це ти створиш клас, як і до нього може бути доступ. (Я не знаю, якщо це правильно).

Дякую!



1
обличчя, коли це не одне дуже довге посилання
Фелікс Ганьон-Греньє,



Відповіді:


279

Передумови: Ви попросили "просте пояснення", яке передбачає:

  1. Ви хочете огляд безглуздя без жаргону
  2. Ви хочете чогось, що допоможе вам навчитися спочатку
  3. Ви виявили, що жодне двоє людей ніколи не відповідають на питання однаково , і це заплутано. Ось чому ви тут просите просте пояснення. Так?

Короткий відповідь без жаргону:

  1. Багато вступних пояснень швидко переходять на приклади "реального світу OOP". Вони, як правило, плутають більше, ніж допомогу, тому сміливо ігноруйте це поки.
  2. Ви можете подумати про вихідний код просто як "шматки" функціональності, які просто трапляються до окремих файлів.
  3. Існують різні способи організації тих "шматок"; залежно від таких речей, як конвенції мови програмування, передумови та підготовка розробників (ів) або просто старі особисті переваги.
  4. OOP та процедурне програмування - це просто дві основні, загальновизнані методології, як організувати та упорядкувати ці "шматки" коду.

Довга відповідь без жаргону:

Процедурний проти OOP - лише один із аспектів фундаментального питання комп’ютерного програмування: як зробити свій код легким для розуміння та шматок пирога для професійного обслуговування . Насправді ви можете написати "процедурний" код, який відповідає деяким принципам ООП, тому обидва не обов'язково протилежні.

Ваше розуміння дійсно зросте, коли ви вивчите інші об'єктно-орієнтовані мови програмування , серед яких PHP - це «нова дитина в блоці».

Ось короткий огляд того, що ви дізнаєтесь, будуючи досвід:

  • Ви можете написати вихідний код PHP, який виконує корисні завдання
  • Ви можете організувати корисні завдання в "шматки" коду
  • Ви можете придумати "шматки" коду незалежно від окремих файлів, де вони зберігаються
  • Іноді ці "шматки" коду поводяться по-різному залежно від параметрів, які ви передаєте
  • Шматки коду, які приймають параметри, називаються "Функції"
  • Функції можна поєднувати разом, і існують різні способи цього:
    • Наприклад: у вас може бути лише один великий PHP-файл із усіма функціями, які ви коли-небудь писали за все життя, перелічені в алфавітному порядку за назвою функції
    • Наприклад: у вас може бути декілька файлів PHP з функціями, які з'єднані між собою за тематикою [наприклад, функції для маніпуляції з базовими рядками, функції для обробки масивів, функції для введення / виводу файлів тощо]
  • OOP - це особливий спосіб об'єднання функцій у "клас"
  • Клас - це лише інший рівень "збивання" коду разом, щоб ви могли ставитися до нього як до єдиного цілого
  • Клас можна розглядати як "збивання" методів та властивостей

    • методи - це просто функції, які логічно пов'язані один з одним певним чином. Слова "метод" і "функція" - це в основному два різних терміни для однієї і тієї ж речі.
    • властивості - просто значення даних, які пов'язані з класом. Це значення, які навмисно не є ізольованими до будь-якої окремої функції, оскільки більш ніж одна з функцій класу повинна мати доступ до них.
      • Наприклад : якщо у вашому класі є маса методів проведення астрономії, властивості класу можуть бути значеннями для певних відомих чисел, про які повинні знати всі методи астрономії (наприклад, Пі, швидкість світла, відстань між конкретними планетами, тощо).
    • Саме тут більшість пояснень ООП стають заплутаними, оскільки вони розгалужуються на " приклади реального світу ", які можуть швидко вийти з теми . Часто «реальний світ» - це евфемізм щодо онтологічних перспектив конкретної особистості. Це, як правило, корисне лише після того, як ви вже досить добре зрозумієте концепцію , щоб навчити її комусь іншому.
    • Щоб зрозуміти OOP без плутанини, ви можете зараз пропустити приклади "реального світу" і просто зосередитись на коді. Клас - це просто спосіб зберігання функцій (ака-методів) і властивостей (ака-даних) як PHP- коду в одному або декількох пов'язаних "фрагментах", де кожен окремий "фрагмент" займається певною темою або частиною функціональності. Це все, що потрібно знати, щоб почати.
  • Клас корисний тим, що дозволяє організувати свій код на дуже високому рівні таким чином, щоб вам було легко зрозуміти, використовувати та підтримувати.

  • Коли хтось написав багато функцій і організував їх у безліч класів, і змусив тих, хто працював разом, якось круто, вони упакували всю справу разом і називають її «Рамкою» .
  • Рамка - це лише наступний найвищий рівень "чунчінгу" (включаючи стиль кодування та конвенції), про який погоджуються один або кілька людей, оскільки їм подобається спосіб організації коду і він відповідає їхньому стилю роботи, уподобанням, цінностям, планам для світу панування тощо.

Дивитися також


1
@dreftymac: ти міг би надати мені відгуки про те, що можна покращити в моїх доповненнях, а не незграбно видаляти це за моєю спиною. Дійсно. Я вітаю конструктивну критику і запрошую вас зробити те саме.
Флавій

1
@Flavius ​​Гаразд. Вдячність за докладені зусилля та за те, що миттєво внесли доповнення. Подумавши про це, здається розумним, що додаток, який ви внесли, заслуговує на власну окрему відповідь.
dreftymac

2
Одне додаток: Клас також корисний для з’єднання даних функціональних даних, тому вам не доведеться передавати їх навколо параметрів.
чиборг

1
+1 спеціально для вашого визначення поняття "Рамка". Я чув, як багато людей намагаються пояснити, що таке рамки, і я думаю, що ваші - це найлегше зрозуміти.
TecBrat

1
приятелю ... це найкраще пояснення, яке я читав про oop vs процедурний, і я читав МНОГО! чудова робота, дійсно ефективна, проста та прямо до суті. ви праві, люди завжди використовують приклади реального світу, і це не простий спосіб зрозуміти що-небудь, це лайно!
thechrishaddad

25

OOP - це не що інше, як шаблон дизайну. Якщо ви тільки починаєте, то вивчіть основи, орієнтуючись на процедурний підхід. Найголовніше - ознайомитись з основними принципами, такими як петлі, умови та інші процедури.

Під час створення процесуального коду складіть звичку, додаючи відповідні методи всередині одного вихідного файлу. Навчісь ділити свої процедури на логічні одиниці, і тоді ти вже починаєш орієнтуватися на об’єкти. В основному, об'єкт - це не що інше, як сукупність методів, які пов'язані один з одним просто тому, що вони працюють на одному і тому ж наборі даних. (Тут мова йде не про бази даних, а про дані програми!)

OO використовується в основному, щоб зробити ваш код більш логічним, розділивши все на прості блоки. Комбінуючи правильні блоки, ви отримуєте повну заявку. ОО - це не срібна куля, ні золотий молоток, який вирішить усі ваші проблеми. Але що це робить, це полегшує розуміння вашого коду.

Потім знову деяким людям все-таки вдається зробити повний безлад з об’єктів, просто перетворивши їх у величезні супероб'єкти сотнями методів. Такі об'єкти мало чим відрізняються від звичайного процедурного підходу, просто через те, що величезна кількість методів поєднуються разом без реальної логіки. Це помилка, яку легко зробити, коли люди починають робити OOP занадто швидко.


3
Я знаходжу якийсь код OOP, щоб бути набагато заплутанішим. Спробуйте, наприклад, зазирнути в живіт.
AndrewC

Прекрасний момент про Pretashop. Магенто - сам звір, що запарюється, але ми вирішили залишитися з ним, тому що такі альтернативи, як Pretashop або WooComm, ще гірші.
PKHunter

6

Ви повинні навчитися обом. Об'єкти - це лише одна з багатьох можливих абстракцій, що існують, і абстракція - це те, про що в кінцевому підсумку йдеться про програмування. З цього приводу почніть з процедурних матеріалів, а потім додайте об'єкти пізніше, оскільки внутрішні внутрішні об'єкти PHP є процедурними.

Що стосується каркасів; спочатку вивчайте основи мови, пишіть експериментальні програми, що викидаються, тощо. Пізніше ви можете ознайомитися з рамками і розглянути себе чи ви знайти деякі з них корисні в певному контексті. Вони точно не є обов'язковими.


6

Щоб додати чудові відповіді вище. Ви повинні сприймати OOP як природний прогрес вашого стилю кодування - коли ви почнете писати невелику програму, можливо, вам просто потрібно буде скласти пару рядків php-коду, а потім згрупувати їх у функції і тим більше функцій, які ви пишете, ви можете відчути потребу. краще організувати їх на заняттях. OOP просто дозволить вашій структурі ваші коди краще - дозволяючи краще підтримувати код.


6

Процедурні php та oop використовують один і той же код PHP. Тоді лише різниця полягає в тому, що при процедурному ви зосереджуєтесь на одному завданні, і це все. На жаль, ви впорядковуєте свій код за допомогою шаблонів або фрагментів, які можна повторно використовувати в багатьох різних областях коду.

Проста відповідь полягає в тому, що вам потрібно знати і розуміти php. Ви можете дізнатися це на php.net. Як тільки ви це зрозумієте, ви зможете почати впорядковувати свій код в патрони.

Процедурний код використовує функції, змінні.

Після того, як ви отримаєте висів речей, ви можете приступити до організації функцій та змінних у класи. Ми починаємо називати функції як методи, а змінні як властивості.

Удачі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.