Почему PHP считается объектно-ориентированным? - PullRequest
4 голосов
/ 09 октября 2010

Я читал вокруг определения ООП и не мог понять, почему PHP считается объектно-ориентированным.

Может ли это быть чем-то, что не делает "базовый уровень" PHP и есть более продвинутые функции?

Ответы [ 6 ]

5 голосов
/ 09 октября 2010

Функции OO были добавлены в PHP поэтапно через версии 3-5, после того как большая часть стандартной библиотеки уже была создана и язык уже был установлен. Фон

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

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

3 голосов
/ 09 октября 2010

Здесь уже есть достаточный (и принятый) ответ, но я решил бросить еще одно бревно в огонь для ясности.

Ключевое слово "class" (и обеспечение его повсеместности, как в Java) не используется в объектно-ориентированном программировании. Как указывал CrazyJungleDrummer, вполне реально (и слишком часто) писать полностью процедурный код в нечто вроде Java; тот факт, что код находится между фигурными скобками в классе HelloWorld, не меняет этого факта. И просто скрыть кучу функций в классе и вызвать их статические методы тоже не ООП - это пространство имен.

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

Да, и еще одна вещь - даже на языке, который более явно ориентирован на ООП, настоящий ООП не всегда является правильным подходом. Все дело в данных.

3 голосов
/ 09 октября 2010

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

PHP имеет эти возможности, но на самом деле их не растягивает. Вы можете использовать ООП, чтобы помочь вашему коду, но это не обязательно. Java, C # и C ++ едва позволяют писать не-OO-код, так как все должно быть в классе.

Может ли это быть чем-то, что не является "базовым уровнем" PHP, а более продвинутыми функциями?

Вы можете сказать это примерно о любом языке ОО. Общее определение ОО-кода - это то, где вы создаете классы и создаете их экземпляры в своем коде, вызывая методы для них из других классов. Ничто не мешает вам использовать только статические методы или один суперкласс с методом run, который вызывает только другие методы внутри класса, оба из которых определенно НЕ будут объектно-ориентированными. Насколько я знаю, нет языков, которые говорят: «Вы должны создавать классы и создавать их экземпляры, иначе вас изгонят!» Даже если бы они были, я сомневаюсь, что они очень близко подошли бы к мейнстриму из-за сумасбродства.

Начинающие часто изучают основы, помещая весь свой код только в один метод, который вызывается в статистике программы. Как только они получают доступ к более «продвинутым» функциям, таким как методы и классы, им предлагаются другие варианты. : D

1 голос
/ 09 октября 2010

Вы можете написать классы с PHP, но большинство основных функций не являются объектно-ориентированными.

0 голосов
/ 08 октября 2015

Этот ответ вдохновлен этим Человеком и его ответом .

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

Когда мы говорим «объектно-ориентированный» или «объектно-ориентированный», это может означать несколько вещей:

  1. Объектно-ориентированный анализ и проектирование [OOAD]
  2. Объектно-ориентированный дизайн [OAD]
  3. Объектно-ориентированная база данных
  4. Объектно-ориентированное моделирование
  5. Объектно-ориентированная операционная система
  6. Объектно-ориентированное программирование [ООП] -> тема для беспокойства
  7. Объектно-ориентированная программная инженерия
  8. Объектно-ориентированный пользовательский интерфейс

Что Чистый Объектно-ориентированный язык программирования [ООП] - это?

Алан Кейс ["Considered by some to be the father of object-oriented programming"] [Определение] 5 ссылка Гордон :

  1. EverythingIsAnObject.

  2. Объекты взаимодействуют путем отправки и получения сообщений (в терминах объектов).

  3. Объекты имеют собственную память (в терминах объектов).

  4. Каждый объект является экземпляром класса (который должен быть объектом).

  5. Класс содержит общее поведение для своих экземпляров (в виде объектов в списке программ)

Теперь ясно видно, что Java, C ++ и PHP нарушают правило 1. Почему bcoz int, float etc. (there are a total of eight primitive types)., поэтому он не может быть объектно-ориентированным в строгом смысле, но некоторые люди считают его ООП.

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

Чем не является ООП?

Объектно-ориентированная технология часто описывается в условия инкапсуляция, полиморфизм и наследование . Но это только личность.

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

  1. Полиморфизм и Наследование, безусловно, являются паттернами, которые облегчают ОО программирование, но не только привязанное к нему

enter image description here

  1. Объектно-ориентированная парадигма не является полностью областью языки программирования высокого уровня -> может тема дебатов но я пришел через это ООП в сборке

Дядя Боб, он же Боб Мартин, в своей лекции показывает, как C реализует Инкапсуляция, наследование и полиморфизм LINK

  1. ОО основан на моделировании реальных объектов // Для маркетинговых целей

Разница между ООП и функциональной?

Возможно, это не идеальный ответ, но я попробовал, спасибо знанию долины .

Примечание: Изображения случайно найдены на Google

enter image description here

0 голосов
/ 16 декабря 2010

Прошло много времени с тех пор, как я задал этот вопрос, но я натолкнулся на эту статью и хотел высказать точку зрения автора.

PHP не объектно-ориентирован!*

...