Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Объектно-ориентированное программирование




PHP поддерживает широкие объектно-ориентированные возможности, полная поддержка которых была введена в пятой версии языка.

Класс в PHP объявляется с помощью ключевого слова class. Методы и поля класса могут быть общедоступными (public, по умолчанию), защищёнными (protected) и скрытыми (private). PHP поддерживает все три основных механизма ООП — инкапсуляцию, полиморфизм и наследование (родительский класс указывается с помощью ключевого слова extends после имени класса). Поддерживаются интерфейсы (ставятся в соответствие с помощью implements). Разрешается объявление финальных, абстрактных методов и классов. Множественное наследование классов не поддерживается, однако класс может реализовывать несколько интерфейсов. Для обращения к методам родительского класса используется ключевое слово parent.

Классы в PHP имеют ряд специальных методов (англ. Magic methods), начинающихся с двух символов подчёркивания. Особо стоит отметить конструктор (__construct(), в версиях до 5.0 конструктором служил метод, одноимённый с классом) и деструктор (__destruct()), а также методы чтения (__get()) и записи (__set()), свёртывания (__sleep()) и развёртывания (__wake()), клонирования (__clone()) и др. Эти методы являются достаточно гибким инструментом: переопределяя их, можно добиться существенного изменения поведения объекта.

Экземпляры класса создаются с помощью ключевого слова new, обращение к полям и методам объекта производится с использованием оператора -> . Для доступа к членам класса из его методов используется переменная $this.

class C1 extends C2 implements I1, I2{ private $a; protected $b; function __construct($a, $b) { parent::__construct($a, $b); $this->a = $a; $this->b = $b; } public function plus() { return $this->a + $this->b; }/*............... */} $d = new C1(1, 2);echo $d->plus(); // 3

Начиная с пятой версии PHP, объекты передаются по ссылке:

class a { public $color = 'red';} $a = new a();echo $a -> color; // red$b = $a;$b -> color = 'blue';echo $a -> color; // blue

«Paamayim Nekudotayim» или просто «двойное двоеточие». Используя эту лексему, программист может обращаться к константам, статическим или перегруженным свойствам или методам класса. При обращении к этим элементам извне класса, программист должен использовать имя этого класса. «Paamayim Nekudotayim» на первый взгляд может показаться странным словосочетанием для обозначения двойного двоеточия. Однако, во время создания Zend Engine версии 0.5 (который входил в PHP3), Andi и Zeev выбрали[20] именно это обозначение. «Paamayim Nekudotayim» действительно значит «двойное двоеточие» на иврите. Это обозначение не менялось ни разу в течение всего времени разработки PHP.[21]

<?phpclass MyClass { const CONST_VALUE = 'Значение константы';}// Использование:: вне объявления классаecho MyClass::CONST_VALUE;?>

Особенности интерпретатора

PHP-скрипты обычно обрабатываются интерпретатором в порядке[1], обеспечивающем кроссплатформенность разработанного приложения:

  1. лексический анализ исходного кода и генерация лексем,
  2. синтаксический анализ полученных лексем,
  3. генерация байт-кода,
  4. выполнение байт-кода интерпретатором (без создания исполняемого файла).

Для увеличения быстродействия приложений возможно использование специального программного обеспечения, так называемых акселераторов. Принцип их работы заключается в кэшировании однажды сгенерированного байт-кода в памяти и/или на диске, таким образом, из процесса работы приложения исключаются этапы 1—3, что в общем случае ведёт к значительному ускорению работы.

Важной особенностью является то, что разработчику нет необходимости заботиться о распределении и освобождении памяти. Ядро PHP реализует средства для автоматического управления памятью; вся выделенная память возвращается системе после завершения работы скрипта.[22]

Расширения

Интерпретатор состоит из ядра и подключаемых модулей, «расширений», представляющих собой динамические библиотеки. Расширения позволяют дополнить базовые возможности языка, предоставляя возможности для работы с базами данных, сокетами, динамической графикой, криптографическими библиотеками, документами формата PDF и тому подобным. Любой желающий может разработать своё собственное расширение и подключить его. Существует огромное количество расширений, как стандартных, так и созданных сторонними компаниями и энтузиастами, однако в стандартную поставку входит лишь несколько десятков хорошо зарекомендовавших себя. Множество расширений доступно в репозитории PECL.

Параметры настройки

Интерпретатор PHP имеет специальный конфигурационный файл — php.ini, содержащий множество настроек, изменение которых влияет на поведение интерпретатора.[23] Имеется возможность отключить использование ряда функций, изменить ограничения на используемую скриптом оперативную память, время выполнения, объём загружаемых файлов, настроить журналирование ошибок, работу с сессиями и почтовыми сервисами, подключить дополнительные расширения, а также многое другое. Во время выполнения скрипта эти параметры могут быть изменены командой ini_set.[24]

Режимы интерпретатора

Существует несколько способов использования интерпретатора PHP:

  1. В качестве модуля к веб-серверу посредством SAPI или ISAPI[25] (например, для Apache модуль mod_php). Веб-сервер запускается с загруженным модулем и при обращении к php-скрипту он выполняется в окружении процесса веб-сервера. Это наиболее распространённый метод использования PHP в силу следующих причин:
    • он наиболее удобен для отладки, так как ошибки PHP выводятся на экран (если данный режим включен в настройках), тогда как в режиме CGI ошибка приводит к генерации HTTP-кода 500 и дополнительную информацию необходимо искать в логах веб-сервера;
    • имеется возможность менять некоторые настройки PHP «на лету» с помощью файла.htaccess, без перезагрузки веб-сервера;
    • в режиме CGI нет возможности воспользоваться HTTP-аутентификацией.[26][27]
    • обладает более высокой скоростью работы.
  2. В качестве CGI. В этом случае, при вызове скрипта веб-сервер вызывает /usr/bin/php-cgi /path/to/script.php. При этом создаётся новый процесс и скрипт выполняется в окружении php-cgi, которое, в зависимости от настроек, может сильно отличаться от окружения процесса веб-сервера. Более современным вариантом является FastCGI. Несмотря на то, что препроцессор PHP все равно будет перезапускаться при каждом запросе[28][29], преимуществом данного варианта перед предыдущим является более высокая степень безопасности, потому как PHP работает как отдельное приложение со своими правами.
  3. В качестве скрипта командной строки, являющегося исполняемым файлом, который вызывается пользователем из командной строки; скрипт выполняется в окружении вызвавшего пользователя. В этом случае возможно использование PHP для создания клиентских GUI-приложений[30] и решения административных задач в операционных системах UNIX, Linux, Microsoft Windows, Mac OS X и AmigaOS. Однако, в таком качестве он не получил распространение, отдавая пальму первенства Perl, Python и VBScript

Пасхальные яйца

PHP имеет несколько пасхальных яиц (шуток). Передача специальных GET-параметров любому php-скрипту приводит к выводу различных изображений.

Например:

любой_сценарий.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42

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

  1. фотография Thies Arntzen (версии 4.1.2, 4.2.2)
  2. фотография таксы (владелец Stig Bakken) (версии 4.3.2, 4.3.3, 4.3.8 — 4.3.10)
  3. фотография чёрного терьера (владелец Zeev Suraski) (версии 4.3.11, 4.4.0 — 4.4.4, 5.1.0, 5.1.2)
  4. фотография кролика (версии 4.3.1, 5.0.0, 5.0.3)
  5. искажённый логотип PHP (версии 5.1.3 — 5.2.13)[31]
  6. фотография игрушечного синего слона с надписью PHP (начиная с версии 5.3.0)[31]

Следующие два значения позволят увидеть стандартный логотип PHP и ZEND, соответственно:[31]

любой_сценарий.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42любой_сценарий.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42

Эти значения можно получить и непосредственно в PHP-скрипте с помощью функций php_logo_guid и zend_logo_guid для логотипа Zend.

Также имеется специальное значение для отображения списка всех авторов PHP (4,5):[31]

любой_сценарий.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000

Альтернативные реализации

В силу популярности языка PHP и желания увеличить быстродействие основанных на нём веб-приложений, создано несколько альтернативных компиляторов, близких к PHP языку. Так в феврале 2010 года компания Facebook открыла[32][33] свой компилятор PHP — HipHop (HPHP, Hyper-PHP) генерирующий код на C++, с последующей компиляцией в машинный код с помощью gcc.

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

Название Лицензия Результат компиляции
HipHop PHP License C++, машинный код
Roadsend PHP GPL/LGPL C, машинный код
Phalanger Ms SS-PL[34] (Shared source) Microsoft IL
Quercus (в составе веб-сервера Resin) GPL или коммерческая JVM
PHC BSDL C, машинный код
Pipp[35] Artistic License и GNU GPL Parrot

На сайте phpclasses.org доступен сравнительный анализ некоторых компиляторов: PHP compiler performance.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...