Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
?>
Разумеется, на этом нововведения не закончились. Появилась полноценная реализация конструкторов и деструкторов классов (__constuct, __destruct), стали доступны модификаторы Private, Public, Protected; (В PHP 4 все методы и переменные внутри объекта были открытыми), введены абстрактные классы (то есть классы, используемые только как базовые).
Появились специальные методы (__call, __get, __set), предназначенные для «отлова» всех нереализованных в данном классе методов, попыток изменения или доступа к неопределённым (или недоступным) переменным. Открылась возможность передать методу тип передаваемого аргумента.
<?php
function expectsMyClass(MyClass $obj) {
}
?>
Хотя множественное наследование в стиле С++ в PHP 5 не поддерживается, классы могут наследовать множественные контакты через ещё одно нововведение – интерфейсы. Естественно, программистам, знакомым с Java, объяснять, что это такое, не надо, для остальных приведу пример:
<?php
interface Display {
function display();
}
class Circle implements Display {
function display() {
print "Displaying circle ";
}
}
?>
(Класс может наследовать только один класс, но при этом иметь столько интерфейсов, сколько потребуется)
Стал ли после всего вышеописанного PHP объектно-ориентированным языком? На мой взгляд, сама постановка вопроса неправомерна. Как сказал по этому поводу Стерлинг Хьюз (один из разработчиков PHP, автор книги PHP Developer`s Cookbook): «Тяжело определить «настоящую объектность», так как у каждого есть своё мнение на этот счёт».
Обработка исключений
Мне кажется, это одно из самых полезных новшеств PHP 5. Механизм обработки исключений реализован за счёт конструкций try/catch/throw и позволяет значительно упростить код, разместив все обработчики ошибок в одном месте. Кроме того, предусмотрена возможность определять собственные исключения. Делается это посредством расширения класса Exception, определив его конструктор и метод getMessage: