Является ли PHP объектно-ориентированным? - PullRequest
39 голосов
/ 15 января 2011

Является ли PHP объектно-ориентированным языком? Если нет, то как насчет фреймворка CakePHP? Это объектно-ориентированная реализация PHP MVC?

Кроме того, можно ли назвать приложение PHP, полностью построенное с использованием классов , объектно-ориентированным ?

Ответы [ 7 ]

91 голосов
/ 29 марта 2012

Нет, PHP не является полностью объектно-ориентированным языком.

И ни C ++, ни Java, потому что все они имеют примитивных типов (и PHP также имеет огромный набор функций, таких как str_replace() и is_*(), которые явно носят процедурный характер). Я знаю только чистый объектно-ориентированный язык - это Ruby и Scala (и можно утверждать, что последний больше нацелен на парадигму функционального программирования).

PHP - это то, что можно назвать «объектно-ориентированным языком».

Что касается кода, написанного на PHP, вы должны понимать, что если вы используете классы, это не делает его ООП. Особенно, если ваш код в основном основан на статическом классе.

Итак, если вы спросите: «Является ли CakePHP OO framework?», Тогда ответ будет - NO . Самым лестным описанием для него было бы «класс-ориентированное программирование» . База кода заполнена статическими методами и переменными, где класс действует больше как пространство имен. По сути, CakePHP - это процедурный код, заключенный в синтаксис, который на поверхности имитирует объектно-ориентированный код.

39 голосов
/ 15 января 2011

Да, последние версии PHP являются объектно-ориентированными. То есть вы можете писать классы самостоятельно, использовать наследование, и, где это уместно, встроенные функции также встроены в объекты (например, функции MySQL).

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

2 голосов
/ 07 октября 2015

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

объекты - пакет, содержащий данные и процедуры

методы - служба доставки

сообщение - запрос на выполнение метода

класс - шаблон для создания объектов

экземпляр - объект, принадлежащий классу

инкапсуляция - сокрытие информации, поддерживаемое объектами

наследование - механизм, позволяющий повторно использовать спецификации класса

иерархия классов - древовидная структура, представляющая отношения наследования

полиморфизм - скрыть различные реализации за общим интерфейсом

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

  1. EverythingIsAnObject.

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

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

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

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

An object is defined by a triple (OID, type constructor, state) where OID is the unique object identifier, type constructor is its type (such as atom, tuple, set, list, array, bag, etc.) and state is its actual value.

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

2 голосов
/ 08 июня 2015

Интересный вопрос.Но "Нет", PHP - это объектно-ориентированный язык, а не объектно-ориентированный, да, но CakePHP - это объектно-ориентированная платформа

2 голосов
/ 19 августа 2013

Для того чтобы любой язык был классифицирован как объектно-ориентированный, он должен придерживаться как минимум 3 принципов ОО: наследование, полиморфизм и инкапсуляция. Я не знаю PHP, и я никогда не использовал его раньше, но если он хотя бы соответствует этим 3 принципам, то это OO, иначе это не так. Мое предложение состоит в том, чтобы искать, как PHP поддерживает, или нет, каждый принцип. Разработчики, как правило, слишком привязаны к языку, который они используют в настоящее время, и часто ошибочны и предвзяты. Возьмем, к примеру, человека, заявившего, что C ++ не является объектно-ориентированным программированием, и в то же время получает много полезного! Этот человек не может быть дальше от истины, но его ответ кажется правильным многим!

Итак, я немного покопался, и кажется, что PHP5 поддерживает эти 3 принципа!

2 голосов
/ 22 декабря 2012

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

1) класс
2) объект
3) Конструкторы и деструкторы
4) Наследование объекта
5) Оператор разрешения области (::)

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

1) http://php.net/manual/en/language.oop5.php

0 голосов
/ 15 января 2011

Вы найдете все последние функции ООП в PHP начиная с версии 5. До PHP v5 существовал PHP v4, который не был полностью объектно-ориентированным.

Также вы найдете много новых и расширенных фреймворков, таких как: -

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

Некоторые заметные моменты: -

  • PHP v5 по-прежнему не поддерживает множественное наследование.
  • PHP v5 по-прежнему поддерживает процедурный способ кодирования, поэтому он все еще обратно совместим для старых сайтов (которые были разработаны процедурным способом с использованием PHP v4).

Надеюсь, это поможет.

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