Читайте также:
|
|
Итак, мы хотели по выбору пользователя генерировать форму для ввода описания статьи или человека и отображать данные, введенные в эту форму. Попробуем решить эту задачу, используя объектно-ориентированный подход. Для начала создадим форму, где пользователь выбирает, что он хочет создать, – описание статьи или человека (точнее, это будут две формы):
<form action="task1.php">
Создать описание статьи: <input type=submit
name=art_create
value="Create Article">
</form>
<form action="task1.php">
Создать описание личности: <input
type=submit name=pers_create
value="Create Person">
</form>
Теперь напишем файл для обработки этих форм. В нем создадим два класса – статьи и личности. У каждого класса имеется метод для инициализации его переменных и метод для отображения объектов данного класса. При решении задачи будут использованы две функции, встроенные в PHP для работы с классами и объектами. Это функция get_class(объект), возвращающая имя класса, экземпляром которого является объект, переданный ей в качестве параметра. И функция get_class_vars(имя класса), которая возвращает массив всех свойств класса и их значений по умолчанию. Аналогично можно получить массив имен всех методов класса: get_class_methods (имя класса)
Листинг 15.6. Использование объектно-ориентированного подхода
<?php
// Создаем классы Статей и Личностей.
// Статья имеет заголовок, автора и
// описание. Личность имеет имя, фамилию
// и e-mail
class Article {
var $title;
var $author;
var $description;
// метод, который присваивает значения
// атрибутам класса
function Article($t="Название отсутствует",
$a="Автор отсутствует",
$d="Описание отсутствует"){
$this->title = $t;
$this->author = $a;
$this->description = $d;
}
//метод для отображения экземпляров класса
function show(){
$art = "<h2>$this->title</h2><font
size=-1>$this->description</font><p>Автор:
$this->author</p>";
echo $art;
}
}
// Определение класса Личностей
class Person {
var $first_name;
var $last_name;
var $email;
//метод, который присваивает значения атрибутам класса
function Person($t="Имя не введено",
$a="Фамилия не введена",$d="Email не указан"){
$this-<first_name = $t;
$this-<last_name = $a;
$this-<email = $d;
}
//метод для отображения экземпляров класса
function show(){
$art = "<h2>$this->first_name</h2><font
size=-1>$this->last_name</font><p>Автор:
$this->email</p>";
echo $art;
}
}
// Далее следует собственно создание и отображение
// экземпляров выбранного класса
if (isset($_GET["art_create"])){ //Если была выбрана статья
$art = new Article; // создаем представителя класса статей
$art_vars = get_class_vars(get_class($art)); //какие
// аргументы этого класса нужно задать
Make_form($art,$art_vars,"art_create"); //вызов функции
// создания формы
if (isset($_GET["create_real"])){ Show_($art_vars); }
// если данные этой формы отправлены, то вызываем
// функцию показа
}
//то же самое, если была выбрана личность
if (isset($_GET["pers_create"])){
$art = new Person;
$art_vars = get_class_vars(get_class($art));
Make_form($art,$art_vars,"pers_create");
if (isset($_GET["create_real"])){ Show_($art_vars); }
}
// функция создания формы
function Make_form($art,$art_vars,$glob){
$str = "<form>"; // html код формы записывается
// в строку $str
//перебираем список переменных класса объекта $art
foreach ($art_vars as $var_name => $var_value){
$str.="$var_name<input type=text name=$var_name><br>";
//создаем элемент формы с именем свойства класса
}
$str.= "<input type=hidden name=$glob>"; // чтобы не
// забыть, что мы создаем
$str.= "<input type=submit name=create_real
value='Create and Show'></form>";
echo "$str"; // выводим форму
}
// функция показа объекта
function Show_($art_vars){
global $art; //используется глобальное имя объекта
$k = count($art_vars); //число свойств класса
// (переменных в форме)
$p=0; //вспомогательная переменная
foreach ($art_vars as $name => $value){
$p++;
if ($_GET["$name"]=="") $val= $art->$name;
else $val = $_GET["$name"];
if ($p<>$k) $par.='"'. $val.'",';
else $par.='"'. $val.'"';
}
$par = '$art->'.$const."(".$par.");";
// теперь $par представляет собой php-код для вызова
// метода класса $art, изначально
// записанного в $par
// например,
// $art->Person('Vasia','Petrov','vas@intuit.ru');
eval($par); // функция eval выполняет код,
// содержащийся в $par
$art->show();
}
?>
УТВЕРЖДЕНЫ
на заседании кафедры
«Информационные системы»
учреждения «Университет «Туран»
Протокол № __ от «____»________ 2012 г.
Заведующая кафедрой
___________________С.А.Тусупова
ПЛАН ЛАБОРАТОРНЫХ ЗАНЯТИЙ
Тема 1. Создание и вывод переменных
Тема 2. Арифметические, логические операторы
Тема 3. Условные операторы
Тема 4. Циклические операторы
Тема 5. Таблица умножения
Тема 6. Массивы
Тема 7. Навигационное меню
Тема 8. Практическое использование функции
Тема 9. Работа с функциями. Область видимости переменных.
Тема 10. Функции для работы с переменными.
Тема 11. Математические функции
Тема 12. Функции explode, implode, htmlspecialchars
Тема 13. Функции htmlentities, html_entity_decode
Тема 14. Функции ltrim, rtrim, trim
Преподаватель: ________________________Бияшев Р.Г.
СОГЛАСОВАНО:
Заведующий кафедрой _______________________Тусупова С.А.
«_________»________________________2012 г.
учреждение «Университет «Туран»
Дата добавления: 2015-08-13; просмотров: 78 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Конструкторы | | | Лабораторная работа 7 - Работа с функциями. Область видимости переменных. |