
- •В.С. Романчик
- •Глава 2. Использование php.
- •Глава 3.
- •Введение
- •Возможности php.
- •Инструменты для разработки
- •Как php работает
- •Глава 1. Язык php Типы данных
- •Массивы и инициализация массивов
- •Объектно-ориентированное программирование в php Основные понятия ооп
- •Классы и Объекты
- •Конструкторы и деструкторы
- •Наследование классов и интерфейсов
- •Магические методы
- •Обработка ошибок
- •Ошибки php и директива error_reporting
- •Чтение и запись бинарных файлов
- •Работа с каталогами в рнр
- •MySql – сервер: бд1; бд2; бд3; бд4;
- •Язык запросов sql
- •Операция соединения.
- •Команды sql для создания баз данных и таблиц
- •Выборка данных из таблиц бд
- •Работа с MySql (сохранение данных в базе данных).
- •Работа с MySql занесение и получение данных из базы данных
- •Некоторые улучшения в организации работы с данными
- •Передача данных от клиента к серверу и от сервера клиенту
- •Клиентские методы http get, post, head
- •Обработка html-форм и передача переменных в скрипт.
- •Передача значений переменных по методу get
- •Ниже рассмотрен еще один пример передачи данных из клиентской формы на сервер по методу get
- •Передача данных на сервер по методу post
- •Php и обработка различных форм
- •Примеры обработки форм
- •Работа с e-mail
- •Отправка почты на php (Функция mail)
- •Cookies-наборы: сохраненное состояние
- •Сессии (Сеансы) Переменные сеанса
- •Отмена регистрации сеансовых переменных
- •Работа с сеансовыми переменными
- •Постоянные данные, использующие сеансы и cookie-наборы
- •Вывод графических данных с помощью рнр Основной способ создания изображений
- •Получение информации об изображении
- •Функции рисования прямых и кривых линий
- •Заливка изображений
- •Работа с палитрой изображения
- •Удаление и изменение цветов палитры
- •Создание прозрачности в изображениях
- •Рисование с помощью кистей
- •Использование специальных стилей для заливки
- •Использование шрифтов и вывод строк
- •Манипулирование и копирование изображений
- •Создаём графический информер на php
- •Слияние изображений с помощью gd
- •Включения удаленных файлов
- •Различные приложения и полезные скрипты на php
- •Пример. Определение типа и версии браузера
- •Генератор паролей на php
- •Время выполнения скрипта
- •Календарь
- •Загрузка файла от клиента на сервер
- •Работа с ftp на уровне php
- •Сбор статистики на php
- •Проверка ввода емайл
- •Чтение почты через Web-интерфейс
- •Разработка собственных листов рассылки
- •Рассылаем письма
- •Добавляем адреса в список рассылки
- •Редактирование адресов
- •Автоответчик
- •Почтовые функции в рнр
- •Задания для выполнения
- •Приложение 1. Протокол передачи гипертекстов http
- •Клиентские методы и заголовкиHttp
- •Указатель ссылки ("Referer")
- •Медиа-типы
- •Кодирование
- •Безопасность и авторизация
- •Кэширование содержимого http на стороне клиента
- •Http идентификация с php
- •Сжатие данных в протоколе http
- •Модель ajax: между загруженной в браузер страницей и сервером появляется прослойка - уровень ajax, который обеспечивает следующую последовательность выполнения приложения.
- •Класс xmlHttpRequest
- •Методы класса xmlHttpRequest
- •Свойства класса xmlHttpRequest
- •Создание экземпляра объекта xmlHttpRequest
- •Использование dom
- •Проблема с кешированием
- •Информируйте пользователя
- •Нет принципов написания кода
- •Аутентификация средствами php
- •Отделение клиентская части программы от серверной части и шаблоны
- •Использование шаблонов в php
- •Шаблоны подстановки
- •Создаем свои шаблоны в php
- •Теги, атрибуты, значения
- •Структура документа
- •Разрыв строки
- •Предварительное форматирование
- •Комментарии
- •Физическая и логическая разметка документа
- •«Физические» теги:
- •«Логические» теги:
- •Специальные символы
- •Графика
- •Формы html
- •Метатеги
- •Способы включения каскадных таблиц стилей
- •Синтаксис
- •Группирование
- •Наследование
- •Множественные классы.
- •Селекторы идентификаторов (id-селекторы).
- •Комментарии
- •Свойства шрифтов.
- •Свойства текста.
- •Представление документа в виде специальных областей – блоков
- •Отступы, поля, позиционирование.
- •Границы элементов.
- •Визуальные эффекты
- •Свойства списков
- •Свойства таблиц
- •Псевдоклассы
- •Псевдостили текста
- •Псевдоэлементы
- •Различные свойства
- •Css. Примеры
- •Типы данных
- •Ассоциированные массивы
- •Операторы
- •Подпрограммы
- •Приложение 11. Популярные веб-приложения и фреймворки
- •Фреймворки
Наследование классов и интерфейсов
Класс может быть наследником только одного суперкласса и множества интерфейсов. Рассмотрим пример
<?php
class MyClass extend MySuperClass implements I1,I2,I3{
//реализация класса
}
?>
В вершине иерархии наследования обычно размещают абстрактные базовые классы, содержащие абстрактные методы и объявленные как абстрактные. Абстрактные методы имеют только объявление и не имеют реализации.
<?php
abstract class MySuperClass {
abstract public function abstrFunc();
}
class MyClass extends MySuperClass {
public function abstrFunc() {
echo “Be-Be-Be”;
}
}
$obj = new MyClass;
$obj->abstrFunc(); // Выводит Be-Be-Be
?>
Невозможно создать объект абстрактного класса, можно только определять производные классы от базового абстрактного класса и создавать объекты уже от производных классов. Стоит отметить, что абстрактные классы также могут содержать и обычные (не абстрактные) методы. Класс не может быть порожден от нескольких классов, в том числе и абстрактных, но зато может быть создан на основе любого числа интерфейсов.
Интерфейсами (interface) являются абстрактные классы, содержащие только абстрактные методы и вообще не имеющие никаких свойств. При этом в интерфейсе методы объявляются ключевым словом function без указания каких-либо спецификаторов, в том числе и abstract и нет тела функции.
<?php
interface Int1 {
function func1();
}
interface Int2 {
function func2();
}
class MyClass implements Int1, Int2 {
public function func1() {
echo 1;
}
public function func2() {
echo 2;
}
}
$obj = new MyClass;
$obj->func1(); // Выводит 1
$obj->func2(); // Выводит 2
?>
Таким образом, хотя множественное наследование классов и не поддерживается, однако можно создавать классы на основе нескольких интерфейсов.
В PHP 5 введена возможность определять методы класса и сами классы как финальные (final).
Метод, при определении которого используется ключевое слово final, не может быть переопределен в классах, производных от данного класса.
<?php
class MyClass {
final public function func() {
// Код метода
}
}
class MyClass1 extends MyClass {
// Следующий код вызывает ошибку
// переопределения финального метода
// базового класса MyClass
public function func() {
// Код метода
}
}
?>
Кроме этого, если final используется при определении самого класса, то порождение от него других классов становится невозможным.
<?php
final class MyClass {
// Код описания класса
}
// Следующий код вызывает ошибку
// порождения от финального класса
class MyClass1 extends MyClass {
// Код описания класса
}
?>
Если класс определен как final, то и все методы данного класса автоматически становятся финальными, таким образом, определять их явно как final уже нет необходимости.
В отличие от Java, определять свойства класса как финальные константы в PHP недопустимо. В PHP введен новый элемент класса – константа класса.
<?php
class MyClass {
const CONSTANT = "константа класса";
}
echo MyClass::CONSTANT; // Выводит "константа класса"
?>
В PHP 5 возможно объявление статических свойств класса.
<?php
class MyClass {
static $static = 1;
}
echo MyClass::$static; // Выводит 1
?>
В PHP используются статические свойства и методы классов. Статические свойства едины для всего класса и не могут принадлежать ни одному из объектов класса. Изменение такого свойства в одном из методов любого объекта приводит к его изменению для всех остальных объектов данного класса. Кроме этого, становится возможным обратиться к такому свойству из класса вне контекста объекта.
Статические методы классов, также как и статические свойства, принадлежат всему классу в целом. Это позволяет использовать такой метод без создания объекта такого класса.
<?php
class MyClass {
static function statFunc() {
echo "статический метод";
}
}
MyClass::statFunc(); // Выводит "статический метод"
?>
Однако в статическом методе становится невозможным использовать указатель $this, так как при вызове статического метода неизвестно в контексте какого объекта он вызывается, или такого объекта может и не существовать.
Специальное ключевое слово instanceof в PHP 5 позволяет определять является ли объект экземпляром определенного класса, или же экземпляром класса производного от какого-либо класса.
<?php
class MyClass { }
$obj1 = new MyClass();
if ($obj1 instanceof MyClass) {
echo "\$obj1 - объект класса MyClass";
}
class MyClass1 extends MyClass { }
$obj2 = new MyClass1();
if ($obj2 instanceof MyClass) {
echo "\$obj2 - объект класса, производного от MyClass";
}
interface Int { }
class MyClass2 implements Int { }
$obj3 = new MyClass2();
if ($obj3 instanceof Int) {
echo "\$obj3 - объект класса, созданного на основе интерфейса Int";
}
?>
Также с помощью instanceof можно определить является ли объект экземпляром класса, созданного на основе определенного интерфейса.
В PHP 5 введена возможность разыменования (dereferencing) объектов, которые возвращаются функциями.
<?php
class MyClass1 {
public function showClassName() {
echo "объект класса MyClass1";
}
}
class MyClass2 {
public function showClassName() {
echo "объект класса MyClass2";
}
}
function deref($obj) {
switch ($obj) {
case "MyClass1":
return new MyClass1();
case "MyClass2":
return new MyClass2();
}
}
deref("MyClass1")->showClassName(); // Выводит "объект
// класса MyClass1"
deref("MyClass2")->showClassName(); // Выводит "объект
// класса MyClass2"
?>
Данный механизм позволяет вызывать методы объектов, имена классов которых возвращаются пользовательскими функциями.
В PHP 5 имеется возможность производить уточнения типов классов (class type hints), которые передается методам в качестве параметров.
<?php
interface Int1 {
function func1(Int1 $int1);
}
interface Int2 {
function func2(Int2 $int2);
}
class MyClass implements Int1, Int2 {
public function func1(Int1 $int1) {
// Код метода
}
public function func2(Int2 $int2) {
// Код метода
}
}
$obj1 = new MyClass;
$obj2 = new MyClass;
$obj1->func1($obj2);
$obj1->func2($obj2);
?>
При этом уточнение типов классов производится не при компиляции, а только на этапе исполнения.