В этой лекции мы рассмотрим объектную модель, предлагаемую языком PHP. Будут представлены понятия
В качестве примера решим задачу автоматической генерации по желанию пользователя представителей
Начнем с основных понятий объектно-ориентированного программирования –
В PHP
class Имя_класса{
var $имя_свойства;
/*список свойств*/
function имя_метода( ){
/* определение метода */
}
/*список методов*/
}
Имена var,
Например, нам нужно создать
<?
class Articles { // Создаем класс Статей
var $title;
var $author;
var $description;
// метод, который присваивает значения
// атрибутам класса
function make_article($t, $a, $d){
$this->title = $t;
$this->author = $a;
$this->description = $d;
}
//метод для отображения экземпляров класса
function show_article(){
$art = $this->title . "<br>" .
$this->description .
"<br>Автор: " . $this->author;
echo $art;
}
}
?>
Итак, для описания физических , состоящий из трех переменных, содержащих характеристики статьи, и двух функций для создания конкретной статьи и для ее отображения.
Как известно, работая с PHP, можно периодически переключаться в режим HTML. В этом случае программа состоит из нескольких кусков (блоков) кода. Определение
<?php
class Articles { // Начало описания класса
var $title;
?>
<?php
// продолжение описания класса
function show_article(){
// содержание метода
}
} // конец описания класса
?>
то программа не будет работать корректно.
Несколько замечаний по поводу имен stdClass, поскольку оно используется внутри движка PHP.
Часто некоторым атрибутам make_article(). Вообще говоря, мы поступили не совсем верно, потому что занялись изобретением велосипеда. Специально для задания начальных значений атрибутам
Приведем пример. Допустим, при создании $, а дату публикации статьи – текущей дате. Тогда следующее описание
<?
class Articles { // Создаем класс Статей
var $title= $_POST["title"];
var $author = "Иванов";
var $description = $_POST["description"];
var $published = date("Y-m-d");
// метод, который присваивает значения
// атрибутам класса
}
?>
А вот такое
<?
class Articles { // Создаем класс Статей
var $title;
var $author = "Иванов";
var $description;
var $published;
// метод, который присваивает значения
// атрибутам класса
function Articles(){
$this->title = $_POST["title"];
$this->description = $_POST["description"];
$this ->published = date("Y-m-d");
}
//метод для отображения экземпляров класса
function show_article(){
$art = $this->title . "<br>" .
$this->description .
"<br>Автор: " . $this->author;
echo $art;
}
}
?>
Отметим, что в __construct. Кроме того, в __destruct.
В одной из первых лекций мы упоминали о существовании в PHP такого типа данных, как new. Создав $имя_объекта->название_свойства или $имя_объекта->название_метода(. Заметим, что перед названием
<?php
$art = new Articles;
// создаем объект $art
echo ($art ->title);
// выводим название объекта $art
$another_art = new Articles;
// создаем объект $another_art
$another_art->show_article();
// вызываем метод для
// отображения объекта в браузер
?>
Каждый из $ и у $another_art есть title, description, author и , show_article(). Но это два разных ->. Таким образом, имена $ и $another_art->title обозначают две разные переменные. Переменная в PHP имеет только один знак доллара перед именем, поэтому нельзя писать $. Эта конструкция будет рассмотрена не как обращение к title $, а как обращение к $title (например, $ ).
<?php
$art->title = "Введение в Internet";
// так можно установить
// значение свойства объекта
$art->$title = "Введение в Internet";
// так нельзя установить
// значение свойства объекта
$property = "title";
$art->$property = "Введение в Internet";
// так можно установить значение
// свойства объекта
?>
Создавая $this. Например, $this->title возвращает значение title у текущего
Механизм
<?php
class Person { // определяем класс Личности
var $first_name; // имя личности
var $last_name; // фамилия личности
function make_person($t,$a){
// метод устанавливает
// значения имени и фамилии объекта
$this->first_name = $t;
$this->last_name = $a;
}
function show_person(){
// метод отображает информацию о личности
echo ("<h2>" . $this->first_name . " " .
$this->last_name . "</h2>");
}
}
class Programmer extends Person{
// определяем класс
// Programmer, расширяющий Person
var $langs = array ("Lisp");
// константным массивом
// задать переменную в var можно
function set_lang($new_lang){
// метод добавляет еще
// один язык к списку известных
$this->langs[] = $new_lang;
}
}
?>
Programmer имеет те же переменные и функции, что и Person, плюс переменную $langs, в которой содержится список изученных программистом языков, и функцию set_lang для добавления еще одного языка к списку изученных. Создать представителя new. После этого можно устанавливать и получать список языков, которые знает программист, и в то же время можно использовать функции, заданные для Person, т.е. устанавливать и получать имя и фамилию программиста и отображать сведения о нем в браузере:
<?php
$progr = new Programmer;
$progr->set_lang("PHP");
// методы, определенные для
// класса Programmer
print_r ($progr->langs);
// методы, определенные для класса Person
$progr->make_person("Bill","Gates");
$progr->show_person();
?>
Отношения, в которых состоят созданные нами Person и Programmer, называют также Person – родитель, а его потомки, такие как Programmer, создаются, основываясь на нем, с помощью расширений. Любой
Порядок определения Programmer, Person, а уже потом сам Person.
Теперь, после знакомства с механизмом
<?php
class Programmer extends Person{
// определяем класс
// Programmer, расширяющий Person
var $langs = array ("Lisp");
function Programmer(){
// этот конструктор будет
// работать и в PHP3, и в PHP4
$this->make_person("Иван","Петров");
}
}
?>
Здесь функция Programmer() является Programmer, задавая ему имя "Иван" и фамилию "Петров".
<?php
class Programmer extends Person{
// определяем класс
// Programmer, расширяющий Person
var $langs = array ("Lisp");
function Programmer($n = "Иван",
$f = "Петров"){
// это конструктор
$this->make_person($n,$f);
}
}
$default_progr = new Programmer();
// создаст программиста Ивана Петрова
$new_progr = new Programmer("Вася",
"Сидоров");
// создаст программиста Васю Сидорова
print_r($new_progr);
/* выведет информацию о переменной
$new_progr, т.е. свойства объекта
и их значения */
?>
Приведенные примеры будут работать и в Person. Допустим, ситуация немного другая: Person:
<?php
class Person { // определяем класс Личности
var $first_name;
var $last_name;
function Person($t,$a){ // конструктор
$this->first_name = $t;
$this->last_name = $a;
}
/* ... */
}
class Programmer extends Person{
// определяем класс
// Programmer, расширяющий Person
var $langs = array ("Lisp");
function set_lang($new_lang){
$this->langs[] = $new_lang;
}
}
$new_progr = new Programmer("Вася",
"Сидоров");
?>
Что произойдет в этом случае при создании Programmer, будет ли автоматически вызвана какая-либо функция? В Programmer() (здесь Person() из Person (здесь
Еще одна ситуация – в
<?php
class Person { // определяем класс Личности
var $first_name;
var $last_name;
function Person($t,$a){ // конструктор
$this->first_name = $t;
$this->last_name = $a;
}
function Programmer($new_lang){
echo "Я – программист";
}
}
class Programmer extends Person{
// определяем класс
// Programmer, расширяющий Person
var $langs = array ("Lisp");
function set_lang($new_lang){
$this->langs[] = $new_lang;
}
}
$new_progr = new Programmer("Вася",
"Сидоров");
?>
В этом случае Programmer() из описания Person. Поскольку Programmer не будет иметь своего
Ни в PHP 3, ни в PHP 4
Иногда внутри описания "::"
Например, вот так можно вызвать в описании Programmer функцию show_name() из Person и функцию say_hello(), заданную в описании Programmer, когда ни один
<?php
class Person { // определяем класс Личности
var $first_name;
var $last_name;
function Person($t,$a){ // конструктор
$this->first_name = $t;
$this->last_name = $a;
}
function show_name(){
// метод отображает информацию о личности
echo ("Меня зовут, " .
$this->first_name . " " .
$this->last_name . "!<br>");
}
}
class Programmer extends Person{
// определяем класс
// Programmer, расширяющий Person
function set_lang($new_lang){
// метод добавляет еще
// один язык к списку известных
$this->langs[] = $new_lang;
Person::show_name();
// вызываем функцию из базового класса
echo "И я знаю теперь еще и " .
$new_lang;
}
function show_name(){
echo ("Я программист, " .
$this->first_name . " " .
$this->last_name . "!<br>");
}
function say_hello(){
echo "Привет!<br>";
}
}
Programmer::say_hello();
// вызываем функцию, когда ни
// один объект ее класса еще не создан
$new_progr = new Programmer("Вася","Сидоров");
$new_progr->set_lang("PHP");
?>
В результате работы этой программы получим следующее:
Привет! Меня зовут Вася Сидоров! И я знаю теперь еще и PHP
С помощью команды Programmer::say_hello(); мы вызываем функцию say_hello Programmer как таковую, а не как
В определении Programmer мы переопределили функцию show_name(), поэтому вызвать функцию show_name() из Person можно только с помощью оператора "::" Вообще говоря, внутри определения $this, если только порожденный
В приведенном выше примере, обращаясь к Person::show_name() ). Это не совсем удобно, потому что имя parent::show_name() ). Parent ссылается на
Кроме нового названия для
Итак, мы хотели по выбору пользователя генерировать форму для ввода описания статьи или человека и отображать данные, введенные в эту форму. Попробуем решить эту задачу, используя
<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
// Создаем классы Статей и Личностей.
// Статья имеет заголовок, автора и
// описание. Личность имеет имя, фамилию
// и 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>e-mail:
$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.'"';
}
$const=get_class($art);
$par = '$art->'.$const ."(" .$par.");";
// теперь $par представляет собой php-код для вызова
// метода класса $art, изначально
// записанного в $par
// например,
// $art->Person('Vasia','Petrov','vas@intuit.ru');
eval($par); // функция eval выполняет код,
// содержащийся в $par
$art->show();
}
?>
Итак, мы изучили основные понятия объектной модели, используемой в языке PHP. Были описаны правила создания
В этой лекции мы рассмотрим объектную модель, предлагаемую языком PHP. Будут представлены понятия
В качестве примера решим задачу автоматической генерации по желанию пользователя представителей
Начнем с основных понятий объектно-ориентированного программирования –
В PHP
class Имя_класса{
var $имя_свойства;
/*список свойств*/
function имя_метода( ){
/* определение метода */
}
/*список методов*/
}
Имена var,
Например, нам нужно создать
<?
class Articles { // Создаем класс Статей
var $title;
var $author;
var $description;
// метод, который присваивает значения
// атрибутам класса
function make_article($t, $a, $d){
$this->title = $t;
$this->author = $a;
$this->description = $d;
}
//метод для отображения экземпляров класса
function show_article(){
$art = $this->title . "<br>" .
$this->description .
"<br>Автор: " . $this->author;
echo $art;
}
}
?>
Итак, для описания физических , состоящий из трех переменных, содержащих характеристики статьи, и двух функций для создания конкретной статьи и для ее отображения.
Как известно, работая с PHP, можно периодически переключаться в режим HTML. В этом случае программа состоит из нескольких кусков (блоков) кода. Определение
<?php
class Articles { // Начало описания класса
var $title;
?>
<?php
// продолжение описания класса
function show_article(){
// содержание метода
}
} // конец описания класса
?>
то программа не будет работать корректно.
Несколько замечаний по поводу имен stdClass, поскольку оно используется внутри движка PHP.
Часто некоторым атрибутам make_article(). Вообще говоря, мы поступили не совсем верно, потому что занялись изобретением велосипеда. Специально для задания начальных значений атрибутам
Приведем пример. Допустим, при создании $, а дату публикации статьи – текущей дате. Тогда следующее описание
<?
class Articles { // Создаем класс Статей
var $title= $_POST["title"];
var $author = "Иванов";
var $description = $_POST["description"];
var $published = date("Y-m-d");
// метод, который присваивает значения
// атрибутам класса
}
?>
А вот такое
<?
class Articles { // Создаем класс Статей
var $title;
var $author = "Иванов";
var $description;
var $published;
// метод, который присваивает значения
// атрибутам класса
function Articles(){
$this->title = $_POST["title"];
$this->description = $_POST["description"];
$this ->published = date("Y-m-d");
}
//метод для отображения экземпляров класса
function show_article(){
$art = $this->title . "<br>" .
$this->description .
"<br>Автор: " . $this->author;
echo $art;
}
}
?>
Отметим, что в __construct. Кроме того, в __destruct.
В одной из первых лекций мы упоминали о существовании в PHP такого типа данных, как new. Создав $имя_объекта->название_свойства или $имя_объекта->название_метода(. Заметим, что перед названием
<?php
$art = new Articles;
// создаем объект $art
echo ($art ->title);
// выводим название объекта $art
$another_art = new Articles;
// создаем объект $another_art
$another_art->show_article();
// вызываем метод для
// отображения объекта в браузер
?>
Каждый из $ и у $another_art есть title, description, author и , show_article(). Но это два разных ->. Таким образом, имена $ и $another_art->title обозначают две разные переменные. Переменная в PHP имеет только один знак доллара перед именем, поэтому нельзя писать $. Эта конструкция будет рассмотрена не как обращение к title $, а как обращение к $title (например, $ ).
<?php
$art->title = "Введение в Internet";
// так можно установить
// значение свойства объекта
$art->$title = "Введение в Internet";
// так нельзя установить
// значение свойства объекта
$property = "title";
$art->$property = "Введение в Internet";
// так можно установить значение
// свойства объекта
?>
Создавая $this. Например, $this->title возвращает значение title у текущего
Механизм
<?php
class Person { // определяем класс Личности
var $first_name; // имя личности
var $last_name; // фамилия личности
function make_person($t,$a){
// метод устанавливает
// значения имени и фамилии объекта
$this->first_name = $t;
$this->last_name = $a;
}
function show_person(){
// метод отображает информацию о личности
echo ("<h2>" . $this->first_name . " " .
$this->last_name . "</h2>");
}
}
class Programmer extends Person{
// определяем класс
// Programmer, расширяющий Person
var $langs = array ("Lisp");
// константным массивом
// задать переменную в var можно
function set_lang($new_lang){
// метод добавляет еще
// один язык к списку известных
$this->langs[] = $new_lang;
}
}
?>
Programmer имеет те же переменные и функции, что и Person, плюс переменную $langs, в которой содержится список изученных программистом языков, и функцию set_lang для добавления еще одного языка к списку изученных. Создать представителя new. После этого можно устанавливать и получать список языков, которые знает программист, и в то же время можно использовать функции, заданные для Person, т.е. устанавливать и получать имя и фамилию программиста и отображать сведения о нем в браузере:
<?php
$progr = new Programmer;
$progr->set_lang("PHP");
// методы, определенные для
// класса Programmer
print_r ($progr->langs);
// методы, определенные для класса Person
$progr->make_person("Bill","Gates");
$progr->show_person();
?>
Отношения, в которых состоят созданные нами Person и Programmer, называют также Person – родитель, а его потомки, такие как Programmer, создаются, основываясь на нем, с помощью расширений. Любой
Порядок определения Programmer, Person, а уже потом сам Person.
Теперь, после знакомства с механизмом
<?php
class Programmer extends Person{
// определяем класс
// Programmer, расширяющий Person
var $langs = array ("Lisp");
function Programmer(){
// этот конструктор будет
// работать и в PHP3, и в PHP4
$this->make_person("Иван","Петров");
}
}
?>
Здесь функция Programmer() является Programmer, задавая ему имя "Иван" и фамилию "Петров".
<?php
class Programmer extends Person{
// определяем класс
// Programmer, расширяющий Person
var $langs = array ("Lisp");
function Programmer($n = "Иван",
$f = "Петров"){
// это конструктор
$this->make_person($n,$f);
}
}
$default_progr = new Programmer();
// создаст программиста Ивана Петрова
$new_progr = new Programmer("Вася",
"Сидоров");
// создаст программиста Васю Сидорова
print_r($new_progr);
/* выведет информацию о переменной
$new_progr, т.е. свойства объекта
и их значения */
?>
Приведенные примеры будут работать и в Person. Допустим, ситуация немного другая: Person:
<?php
class Person { // определяем класс Личности
var $first_name;
var $last_name;
function Person($t,$a){ // конструктор
$this->first_name = $t;
$this->last_name = $a;
}
/* ... */
}
class Programmer extends Person{
// определяем класс
// Programmer, расширяющий Person
var $langs = array ("Lisp");
function set_lang($new_lang){
$this->langs[] = $new_lang;
}
}
$new_progr = new Programmer("Вася",
"Сидоров");
?>
Что произойдет в этом случае при создании Programmer, будет ли автоматически вызвана какая-либо функция? В Programmer() (здесь Person() из Person (здесь
Еще одна ситуация – в
<?php
class Person { // определяем класс Личности
var $first_name;
var $last_name;
function Person($t,$a){ // конструктор
$this->first_name = $t;
$this->last_name = $a;
}
function Programmer($new_lang){
echo "Я – программист";
}
}
class Programmer extends Person{
// определяем класс
// Programmer, расширяющий Person
var $langs = array ("Lisp");
function set_lang($new_lang){
$this->langs[] = $new_lang;
}
}
$new_progr = new Programmer("Вася",
"Сидоров");
?>
В этом случае Programmer() из описания Person. Поскольку Programmer не будет иметь своего
Ни в PHP 3, ни в PHP 4
Иногда внутри описания "::"
Например, вот так можно вызвать в описании Programmer функцию show_name() из Person и функцию say_hello(), заданную в описании Programmer, когда ни один
<?php
class Person { // определяем класс Личности
var $first_name;
var $last_name;
function Person($t,$a){ // конструктор
$this->first_name = $t;
$this->last_name = $a;
}
function show_name(){
// метод отображает информацию о личности
echo ("Меня зовут, " .
$this->first_name . " " .
$this->last_name . "!<br>");
}
}
class Programmer extends Person{
// определяем класс
// Programmer, расширяющий Person
function set_lang($new_lang){
// метод добавляет еще
// один язык к списку известных
$this->langs[] = $new_lang;
Person::show_name();
// вызываем функцию из базового класса
echo "И я знаю теперь еще и " .
$new_lang;
}
function show_name(){
echo ("Я программист, " .
$this->first_name . " " .
$this->last_name . "!<br>");
}
function say_hello(){
echo "Привет!<br>";
}
}
Programmer::say_hello();
// вызываем функцию, когда ни
// один объект ее класса еще не создан
$new_progr = new Programmer("Вася","Сидоров");
$new_progr->set_lang("PHP");
?>
В результате работы этой программы получим следующее:
Привет! Меня зовут Вася Сидоров! И я знаю теперь еще и PHP
С помощью команды Programmer::say_hello(); мы вызываем функцию say_hello Programmer как таковую, а не как
В определении Programmer мы переопределили функцию show_name(), поэтому вызвать функцию show_name() из Person можно только с помощью оператора "::" Вообще говоря, внутри определения $this, если только порожденный
В приведенном выше примере, обращаясь к Person::show_name() ). Это не совсем удобно, потому что имя parent::show_name() ). Parent ссылается на
Кроме нового названия для
Итак, мы хотели по выбору пользователя генерировать форму для ввода описания статьи или человека и отображать данные, введенные в эту форму. Попробуем решить эту задачу, используя
<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
// Создаем классы Статей и Личностей.
// Статья имеет заголовок, автора и
// описание. Личность имеет имя, фамилию
// и 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>e-mail:
$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.'"';
}
$const=get_class($art);
$par = '$art->'.$const ."(" .$par.");";
// теперь $par представляет собой php-код для вызова
// метода класса $art, изначально
// записанного в $par
// например,
// $art->Person('Vasia','Petrov','vas@intuit.ru');
eval($par); // функция eval выполняет код,
// содержащийся в $par
$art->show();
}
?>
Итак, мы изучили основные понятия объектной модели, используемой в языке PHP. Были описаны правила создания
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.