Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

рабочая тетрадь(3)

.pdf
Скачиваний:
40
Добавлен:
10.02.2016
Размер:
5.34 Mб
Скачать

Лабораторная работа 1.8

Автоматическая загрузка классов

Упражнение 1: Создание классов в отдельных файлах

В текстовом редакторе откройте файл oop\users.php

В текстовом редакторе создайте новый файл

Перенесите описание абстрактного класса AUser из файла oop\users.php в новый файл

Сохраните новый файл как oop\classes\AUser.class.php

В текстовом редакторе создайте новый файл

Перенесите описание класса User из файла oop\users.php в новый файл

Сохраните новый файл как oop\classes\User.class.php

В текстовом редакторе создайте новый файл

Перенесите описание интерфейса ISuperUser из файла oop\users.php в новый файл

Сохраните новый файл как oop\classes\ISuperUser.class.php

В текстовом редакторе создайте новый файл

Перенесите описание класса SuperUser из файла oop\users.php в новый файл

Сохраните новый файл как oop\classes\SuperUser.class.php

Сохраните файл oop\users.php

Упражнение 2: Использование автозагрузки файлов

В файле oop\users.php (основной код) создайте и опишите функцию __autoload(), которая производит автозагрузку нужного класса при создании его экземпляра

Сохраните файл oop\users.php

Запустите браузер

Наберите в адресной строке браузера http://mysite.local/oop/users.php

Проверьте работу скрипта. Вы не должны увидеть никаких изменений. Если есть ошибки, найдите их и исправьте

class PropertyTest {

/** Место хранения перегружаемых данных. */ private $data = array();

public function __set($name, $value) { $this->data[$name] = $value;

}

public function __get($name) {

if (array_key_exists($name, $this->data)) { return $this->data[$name];

}

}

}

$obj = new PropertyTest; $obj->a = 1;

echo $obj->a . "\n\n";

class MethodTest {

public function __сall($name, $a) {

echo "Вызов метода '$name' ". implode(', ', $a);

}

/** PHP 5.3. Значение $name регистрозависимо! */ public static function __сallStatic($name, $a) {

echo "Вызов метода '$name' ". implode(', ', $a);

}

}

$obj = new MethodTest; $obj->foo("one", 2, "three");

MethodTest::foo("one", 2, "three");

class TestClass { public $foo;

public function __construct($foo) { $this->foo = $foo;

}

public function __toString() { return $this->foo;

}

}

$class = new TestClass('Привет'); echo $class;

class TestClass {

public function __invoke($var) { return $var * $var;

}

}

$obj = new TestClass(); echo $obj(5);

function foo(ClassA $obj) {

/* Ожидается только экземпляр класса ClassA */

}

function foo(callable $x) { return $x();

}

foo(['ClassName', 'staticMethodName']);

foo($object, 'methodName');

foo($invokableObject);

class User {

private $login, $password;

function __construct($login, $password) { $this->login = $login; $this->password = $password; $this->getUser();

}

private function getUser() {} public function __sleep() {

return array('login', 'password');

}

public function __wakeup(){ $this->getUser();

}

}

trait Hello {

function hello() {return 'Hello';}

}

trait User {

function user($name) {return $name;}

}

class Welcome {

use Hello, User;

}

$obj = new Welcome();

echo $obj->hello(), ' ', $obj->user('John'); /* Hello John */

trait Hello {

function hello() {return 'Hello';}

}

trait User {

function user($name) {return $name;}

}

trait Greeting { use Hello, User;

function sayHello($name) {

echo $this->hello(), ' ', $this->user($name);

}

}

class Welcome {use Greeting;}

(new Welcome())->sayHello('John');

trait Hello {

private function sayHello($name) { return 'Hello ',$name;

}

}

class Welcome {

use Hello {sayHello as public;}

}

$obj = new Welcome();

echo $obj->sayHello('John');

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]