2015-02-16 5 views
3

У меня ситуация парованиесоздать объект того же класса, который передается объект в PHP

class A { 
    ... 
    public static function Copy($obj) { 
     $newObj = new (class of $obj); 
     ... 
    } 
} 

class B extends A { 
... 
} 

class C extends A { 
... 
} 
... 
$newB = B::Copy($BObject); 
$newC = C::Copy($CObject); 

Могу ли я создать новый объект класса параметров, или я должен переопределить метод для каждого наследуемого класса?

ответ

2

Может быть в состоянии упростить, но get_class() это путь:

$class = get_class($obj); 
$newObj = new $class; 
1

Я думаю, что что-то, как это должно работать для вас:

(Здесь я использую get_called_class(), чтобы получить имя класса который вызов метода)

<?php 

    class A { 

     public static function Copy() { 
      $class = get_called_class(); 
      return $newObj = new $class;  
     } 

    } 

    class B extends A { 

    } 

    class C extends A { 

    } 

    $newB = B::Copy(); 
    print_r($newB); 
    $newC = C::Copy(); 
    print_r($newC); 

?> 

Выход:

B Object () 
C Object () 
+0

Возможно, из-за моей версии или конфигураций php она запускает фатальную ошибку:/ – user3125758

+0

@ user3125758 nope, моя ошибка. забыл скопировать правильный код – Rizier123

Смежные вопросы