Объектно-ориентированное программирование


Простой пример объявления класса в РНР:

class A
{
public $pubVar = "Public";
private $prVar = "Private var";

public function fooPub(){
echo $this->prVar;
}
private function fooPriv(){
echo "Hello from class method!";
}

public function A($initStr){
$this->prVar = $initStr;
}
}

$ff = new A("Initializing private vars from konstructor <br />");
$ff->fooPub();
echo $ff->pubVar; //Выведет “Initializing private vars from constructor”
//echo $ff->prVar; //Тут ошибка, попытка доступа к внутренней переменной из вне класса.


Наследование:

class simpleClass{
function fooPub() {
echo "Method from parent class <br />";
}
}

class ExtendClass extends simpleClass{
// Переопрееление родительского метода
function fooPub() {
echo "Echo from ExtendClass <br />";
parent::fooPub();
}
}

$extended = new ExtendClass();
$extended->fooPub();


Абстрактный класс:

abstract class abstrktClss {
abstract function someMethod();
}

class NewClass extends abstrktClss {
function someMethod () {
return ‘someMethod’;
}
}

$c = new NewClass1();
echo $c->someMethod ();


Интерфейс:

interface intDemo
{
public function setIntVar($name, $var);
public function outString($strToOut);
}

class someClass implements intDemo{
private $vars = array();

public function setIntVar ($name, $var){
$this->vars[$name] = $var;
}

public function outString ($strToOut){
echo “ <hr>”.$strToOut.“ <hr>”;
}
}


XML

Пример XML документа содержащего простой кулинарный рецепт:

<?xml version="1.0" encoding="UTF-8" standalone="yes"? >
<recipe name="хлеб" preptime="5" cooktime="180">
<title>Простой хлеб </title>
<ingredient amount="3" unit="стакан">Мука </ingredient>
<ingredient amount="0.25" unit="грамм">Дрожжи </ingredient>
<ingredient amount="1.5" unit="стакан">Тёплая вода </ingredient>
<ingredient amount="1" unit="чайная ложка">Соль </ingredient>
<Instructions>
<step>Смешать все ингредиенты и тщательно замесить. </step>
<step>Закрыть тканью и оставить на один час в тёплом помещении. </step>
<step>Замесить ещё раз, положить на противень и поставить в духовку. </step>
</Instructions>
</recipe>


DOM

Пример доступа и манипулирования элементом документа с использованием DOM

<script language="JavaScript" type="text/javascript">
function rebuildCode(){

var lngfrom=document.forms.form1_lng_name.titleText;
lngfrom.value="Текущий язык: Русский";

var lngfrom=document.getElementById("titleText2");
lngfrom.innerHTML="Текущий язык: Русский";
}
</script>

<form name="form1_lng_name">
<input type="text" name="titleText" value="dfdfd" /> <br />
<div id="titleText2"> </div>

<input type="button" value="PressMe" onClick="rebuildCode();">
</form>


Упражнения

Пример

Создайте директорию users, в которой создайте 3 файла:
o1.ini
o2.ini
o3.ini
Каждый из этих файлов должен иметь следующую структуру:
FIO =
Address =
Phone =
Причём значения должны FIO, Address и Phone быть в каждом файле разные.
Пример:
FIO = Ivanov Ivan
Address = Brivibas 117-97
Phone = 12345678

Все следующие операции производятся в imja.php.

Создать класс содержащий информацию о пользователе и методы её получения из ini файла.
Требования к классу:
•Класс должен иметь три приватные (private) внутренние переменные, содержащие ФИО, адрес и телефон пользователя.
•Класс должен иметь метод вывода всей информации сохранённой в текущих значениях полей. (примерно следующее: public function showMyData(){echo $this->fio.» <br />»...})
•Класс должен иметь private метод загрузки информации из ini файла (get_data_from_ini(String iniFilePath)). Для этого можно использовать встроенную функцию bool parse_ini_file( string filename ) описание которой находится в разделе справочной информации данной лабораторной работы.
Также должна производится проверка на существование запрашиваемого файла, и если его нет, то функция должна возвращать False. Для проверки существования файла существует функция bool file_exists ( string filename ), описание которой также находится в информационной части данной лабораторной работы.
•Класс должен иметь метод получения информации о пользователе без указания того, что данные хранятся в ini файлах. Необходимо замаскировать вызов функции get_data_from_ini() создав функцию get_user_by_ID(Int uID). Эта функция должна заполнять внутренние переменные только на основе номера требуемого пользователя, вызывая в своём теле parse_ini_file(), в таком случае полученный параметр uID является именем ini файла с информацией о нужном пользователе.
В случае, если информация о пользователе с таким ID недоступна, должно выдаваться сообщение и внутренние поля заполнятся значениями Unknown.
•Класс должен иметь конструктор в котором производится заполнение внутренних переменных с помощью вызова метода get_user_by_ID, где ID требуемого пользователя передаётся в обязательном параметре конструктора.
Примечание: для подавления сообщений об ошибках, при вызове функции применяется символ @. К примеру, если в конструкторе класса ожидается параметр, то при вызове конструктора без параметров будет cгенерированно предупреждение Warning: Missing argument 1 for robot::__construct().
Пример: $robot = @new robot();

Основы работы с DOM
•Создать простую форму содержащую следующие элементы ввода:
•Текстовое поле с текстом “Текст по умолчанию” и именем txt1;
•Кнопку с текстом “Изменить текст в текстовом поле”, при нажатии на эту кнопку, текст в текстовом поле txt1 должен меняться на “Текст обновлён”.
•Кнопку с текстом “Change”, при нажатии на эту кнопку, текст на этой кнопке должен меняться на “New text”, при чём в функцию должен поступать объект this этой кнопки и манипуляции должны производится с ним.
•Вне формы создать дополнительно две кнопки, нажатие на которые соответственно делает все элементы доступными/недоступными (disabled=true/false).

Дополнительная информация
ООП

Информация о функции parse_ini_file
Функция обрабатывает конфигурационный файл. Прототип выглядит так:
array parse_ini_file ( string filename [, bool process_sections] )
В итоге возвращается ассоциативный массив с ключами => значениями соответствующими структуре анализируемого файла.
Первый параметр имя ini файла, второй, необязательный, позволяет получить не только названия отдельных колонок, но и секции. По умолчанию второй параметр имеет значение FALSE.
Замечание: Существует зарезервированные слова, которые вы не можете использовать в качестве ключей в ini-файлах. Такими словами являются следующие: null, yes, no, true и false.
Замечание: Ключи и имена секций, состоящие из цифр, будут обработаны как целые числа в PHP, поэтому числа, начинающиеся с 0 будут считаться восьмеричными, а начинающиеся с 0x - шестнадцатеричными.

Пример: Имеется 1.ini файл следующего содержания:
FIO = Ivanov Ivan
Address = Brivibas 117-97
Phone = 12345678

[Another data]

FIO = Petrov Petr
Address = Maizes 17-9
Phone = 987654321

Вызов функции parse_ini_file с различными параметрами приведёт к различным результатам:
$arr = parse_ini_file("users/1.ini");
print_r($arr);
Выведет: Array ( [FIO] => Ivanov Ivan [Address] =>Brivibas 117-97 [Phone] => 12345678 )

$arr = parse_ini_file("users/1.ini",true);
print_r($arr);
Выведет: Array ( [FIO] => Ivanov Ivan [Address] => Riga, Brivibas 117-97 [Phone] => 12345678 [Another data] => Array ( [FIO] => Ivanov Ivan [Address] => Riga, Brivibas 117-97 [Phone] => 12345678 ) )

Функция file_exists()
Функция проверяет существования файла, адрес которого получен в параметре. Если файл существует,то возвращается TRUE, в противном случае соответственно FALSE.
Пример:

if (file_exists(“users/2.ini”)) {
echo "The file users/2.ini exists";
return true;
} else {
echo "The file users/2.ini NOT exists";
return false;
}


Методы работы с DOM

Доступ к элементу формы по его имени

var lngfrom=document.forms.form1_lng_name.titleText;

Доступ к элементу формы по его ID

var lngfrom=document.getElementById("someElementID");

Изменение свойства (содержащийся в текстовом поле текст) элемента

lngfrom.value="Текущий язык: Русский";

Дополнительный текст к тегу <div id='div1'>

var lngfrom = document.getElementById("div1");

lngfrom.innerHTML = "Текущий язык: Русский";

Получение и использование указателя на самого себя (this).

<script language="JavaScript" type="text/javascript">
function chngThisValue(inElement, inTxt){
inElement.value=inTxt;
}
</script>
<input type="button" value="this.Example" onClick="javascript:chngThisValue(this,'New text for this button');">


Функция делает доступными/недоступными все элементы формы:

function disableAll(formName,bFlag){
var frmObj = document.getElementById(formName);
for(i=0;i < frmObj.elements.length;i++)
frmObj.elements[i].disabled=bFlag;
}


Hosted by uCoz