Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: __clone()
 
 автор: Kirill   (08.08.2004 в 19:30)   письмо автору
 
 

Возникла следующая ошибка:
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 работают.

   
 
 автор: cheops   (08.08.2004 в 22:04)   письмо автору
 
   для: 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;
?>

   
 
 автор: Kirill   (09.08.2004 в 12:03)   письмо автору
 
   для: cheops   (08.08.2004 в 22:04)
 

Спасибо, но возникает следующий вопрос.
Осталась ли возможность переопределить метод "clone" и обращаться к нему также ($objcopy = clone $obj) ?
Если да, то как его назвать? ("__clone", "clone") ?

ЗЫ
Бился, бился. Но ничего так и не вышло...

   
 
 автор: cheops   (09.08.2004 в 12:15)   письмо автору
 
   для: 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:32)   письмо автору
 
   для: cheops   (09.08.2004 в 12:15)
 

Это конечно, не совсем в духе объектно-ориентированного программирования в чистом виде, но к такому способу часто прибегают на Java, делают конструктор закрытым private и создают фабричный метод...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования