|
|
|
| Возникла следующая ошибка:
Fatal error: Cannot call __clone() method on objects - use 'clone $obj' instead in Path on line 11
При выполнении следующего скрипта
<?php
class TC
{
public $member;
}
$first = new TC;
$second = new TC;
$first->member = 3;
$second = $first->__clone();
?>
|
PHP 5, такие функции как __set, __get работают. | |
|
|
|
|
|
|
|
для: Kirill
(08.08.2004 в 19:30)
| | Я создателей PHP просто убъю - приеду и растреляю из полуавтоматического пистолета! Ну кто их за язык тянул пол года назад - ведь работало на php-5.0.0b2-Win32.zip...
Ладно, написал в книге нечего жаловаться... Используйте следующий вариант:
<?php
class TC
{
public $member;
}
$first = new TC;
$second = new TC;
$first->member = 3;
$second = clone $first;
echo $first->member;
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(08.08.2004 в 22:04)
| | Спасибо, но возникает следующий вопрос.
Осталась ли возможность переопределить метод "clone" и обращаться к нему также ($objcopy = clone $obj) ?
Если да, то как его назвать? ("__clone", "clone") ?
ЗЫ
Бился, бился. Но ничего так и не вышло... | |
|
|
|
|
|
|
|
для: Kirill
(09.08.2004 в 12:03)
| | Нет. Похоже __clone жёстко запретили использовать, чтобы использовали clone, а clone стал ключевым словом, а не методом класса... хитро. Мне кажется в качестве компромиса можно использовать _clone с одним подчёркиванием, организовав так называемы "фабричный" способ получения объекта:
<?php
class TC
{
public $member;
public function _clone()
{
// Переопределяем метод
$obj = new TC;
$obj = clone $this;
$obj->member = 7;
return $obj;
}
}
$first = new TC;
$second = new TC;
$first->member = 3;
echo $first->member."<br>";
$second = $first->_clone();
$first->member = 5;
echo $first->member."<br>";
echo $second->member."<br>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(09.08.2004 в 12:15)
| | Это конечно, не совсем в духе объектно-ориентированного программирования в чистом виде, но к такому способу часто прибегают на Java, делают конструктор закрытым private и создают фабричный метод... | |
|
|
|