Объектно-ориентированное программирование
Простой пример объявления класса в РНР:
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;
}