В PHP4 отсутствовала возможность определить конструктор копии, который бы выполнялся при создании копии объекта. PHP4 осуществлял побайтовое копирование объекта, создавая точные копии всех его свойств.
Данное поведение PHP4 не всегда позволяло достичь нужного результата. Хорошим примером необходимости конструктора копии является объект, представляющий GTK-окно и содержащий его ресурсы: при создании копии такого объекта, вам, скорее всего, хотелось бы создать новое окно с теми же свойствами, и получить объект, содержащий ресурсы нового окна. Еще один пример: объект хранит ссылку на другой используемый им объект, и при создании копии хотелось бы получить ссылку на новый экземпляр объекта, а не на тот же.
Для создания копии объекта, вызывается его метод __clone():
$copy_of_object = $object->__clone();
?>
При выполнении данной операции, PHP5 сначала проверит, определен ли метод __clone(). Если он не определен, PHP вызовет метод __clone(), созданный под умолчанию, который осуществит побайтное копирование всех свойств объекта. В случае же, если метод __clone() определен, он отвечает за установку требуемых свойств создаваемой копии объекта. Для удобства, Zend Engine предоставляет функцию, импортирующую все свойства копируемого объекта, так что достаточно переопределить только те свойства, которые необходимо изменить.
Пример:
class MyCloneable {
static $id = 0;
function MyCloneable() {
$this->id = self::$id++;
}
function __clone() {
$this->name = $that->name;
$this->address = “New York”;
$this->id = self::$id++;
}
}
$obj = new MyCloneable();
$obj->name = “Hello”;
$obj->address = “Tel-Aviv”;
print $obj->id . “\n”;
$obj = $obj->__clone();
print $obj->id . “\n”;
print $obj->name . “\n”;
print $obj->address . “\n”;
?>
Март
7,
2008
— Рубрика: PHP
Метки: PHP, Клонирование объектов
В PHP5 введено ключевое слово “final”, используемое для определения финальных элементов и методов класса. Элементы и методы, в объявлении которых указано ключевое слово “final”, нельзя переопределить в классе-потомке.
Пример:
class Foo {
final function bar() {
// ...
}
}
?>
Также возможно использовать ключевое слово “final” в определении самого класса, что запретит создание производных от него классов. При этом все элементы и методы такого класса автоматически являются финальными, и определять их таковыми явно нет необходимости.
Пример:
final class Foo {
// определение класса
}
// следующая строка вызовет ошибку времени выполнения
// class Bork extends Foo {}
?>
Свойства не могут быть финальными.
Существующие программы, не испольующие собственные классы или функции, названные “final”, будут работать без каких-либо изменений.
[fixxxer] Примечание: в PHP все методы класса являются виртуальными.
Март
3,
2008
— Рубрика: PHP
Метки: PHP, Свойства
В этой статье я приведу примеры простейших скриптов на PHP. Такие скрипты можно увидеть на многих сайтах интернета. Всего я подготовил 4 примера.
1. Время, затраченное на генерацию php-скрипта
// Определяем текущее
время.
list($msec,$sec)=explode(chr(32),microtime());
$HeadTime=$sec+$msec;
//
На этом месте должен быть ваш PHP код.
// Можно сделать простой
инклудинг:
// include("script.inc.php");
// Определяем ещё раз
текущее время.
list($msec,$sec)=explode(chr(32),microtime());
//
Выводим время затраченное на выполнение скрипта
// с 4 знаками после запятой
(точки).
echo "Страница сгенерировалась за
".round(($sec+$msec)-$HeadTime,4)." сек.";
?>
2. Подсветка php-кода
highlight_file("script.php");
?>
3. Авторизация
Вход :
enter.php :
foreach
(file(passw/passw) as $k)
(if (substr($k, 0, -2)=="$login
$pass")($result=1
))
if ($result!=1){Несанкционированный
доступ
exit;}
session_start();
session_register("authorize");
$authorize=1;
?>
На
каждой странице защищёной зоны ЕЩЁ ДО ТЕГА т.е. в самом
верху(!)
надо поставить код:
session_start();
if
($authorize!=1){Несанкционированный доступ
exit;}
Всё что после -
будет выполнено только если пароль был введён.
Страница
выхода:
session_start();
session_destroy();
>
4. Генератор пароля
// пример генератора паролей
// created by ne_tot
print
"
“;
$symb =
“qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!@#$%^&*()_+#№-=<>`”;
$count
= strlen($symb)-1;
if(empty($lenght)) {exit();}
else
{
foreach
($lenght as $digit)
print “Сгенерирован новый пароль из $digit
символов - “;
for($i=0; $i <= ($digit-1); $i++)
{
$rand
= rand(0, $count);
print "
color=red>$symb[$rand]“;
}
print “
width=100%>“;
}
?>
Конечно скрипты не оригинальные и подобных им существует великое множество, зато они помогут начинающим изучать великий и могучий язык PHP.
Февраль
21,
2008
— Рубрика: PHP
Метки: PHP, изучать, могучий язык