- PHP5 поддерживает ограниченное количество указателей типа. Это позволяет вам указать определенный тип данных для параметра функции или метода класса (или один из подтипов), или массив. Однако, вы не можете определить другие скалярные типы.
- Конструкция foreach теперь поддерживает объявление значения элемента по ссылке.
- К ядру платформы был добавлен ряд новых функций для работы со строками и массивами.
Объекты
- Для всех намерений и целей, все объекты в PHP5 передаются по ссылке. Это
означает, что назначение объекта переменной не будет приводить к созданию его копии,
а предполагает создание еще одной ссылки на него. - Константы, также как статические методы и свойства, могут быть определены в рамках класса.
- Методы и свойства класса теперь имеют функции видимости (модификаторы ограничения доступа), и могут быть объявлены как
public, private или protected. Классы и методы могут также быть объявлены как final, для предотвращения их переопределения в производных классах. - Так как все объекты присваиваются по ссылке, необходим специализированный механизм
для копирования объектов. Для этого можно использовать ключевое слово clone и специальный («магический») метод __clone(). - В PHP5 добавлены унифицированные функции конструктора (__construct()) и деструктора (__destruct()) объектов, при этом деструктор является новым для PHP методом, предназначенным для уничтожения объектов.
- C добавленными интерфейсами и абстрактными классами, PHP-разработчики теперь могут иметь больший контроль над применением ООП.
Интерфейсы могут использоваться для определения общих API, в то время как абстрактные классы описывают модели для реализаций класса, которые следуют определенному плану (проекту). - Определения классов теперь могут быть загружены по требованию с помощью функции __autoload().
Магические методы
В PHP5 было введено множество новых «магических» методов:
- __get() и __set() методы вызываются при доступе к свойству неопределенного объекта или присвоении ему значения, в то время как __call() выполняется при вызове несуществующего метода класса.
- __isset() метод срабатывает при вызове функций isset() на несуществующем или недоступном свойстве класса.
- __unset() метод срабатывает при вызове функции unset() с неопределенным свойством класса в качестве аргумента.
- __toString() метод срабатывает при попытке использованию напрямую конструкции echo или функции print() для объекта.
- __set_state() метод срабатывает динамически для тех классов, которые экспортируются функцией var_export().
Некоторые новые расширения
- SimpleXML обеспечивает легкий доступ к XML данным используя объектную и нотацию массивов.
- PHP5 также представляет DOMXML, DOMXSL и Sablotron замена в форме основанного на libxml2 DOM и XSL расширения.
- PHP Data Objects (PDO) расширение обеспечивает объединенное расширение доступа к базам данных которое позволяет производить доступ к различным типам систем баз данных при использовании общего интерфейса и методов. PDO не использует абстрактных слоёв для подключения к БД, наподобие ODBC, а использует для разных БД их «родные» драйверы, что позволяет добиться высокой производительности.
- Hash-расширение является заменой GPLed libmhash; оно было добавлено в ядро PHP с версии 5.1.2. Она позволяет производить hash используя много алгоритмов, включая как знакомые MD5 и SHA1, так и более безопасные (хотя более медленные), например, snefru.
- Стандартная PHP библиотека (SPL) обеспечивает многочисленные интерфейсы, которые увеличивают пути взаимодействия классов с языком PHP, включая новые интерфейсы Iterator.
- Новое расширение Reflection позволяет производить самоанализ во время выполнения кода PHP.
Управление обработкой ошибок
- Классы теперь поддерживают исключения; функция set_exception_handler() позволяет определить обработчик исключений для всего срипта.
- Был добавлен новый уровень сообщений об ошибках — E_STRICT, для генерации предупреждений о устаревших методах программирования в коде.
Примечание: так как это перевод, буду признателен за указания на ошибки, лучшие формулировки и прочие комментарии.
Пасибо за перевод. Интересно было узнать отличия...