[PHP] Рекурсивное создание объекта.

DavyJohnes
На сайте с 05.01.2011
Offline
84
923

Имеется некий класс classname, у класса должен быть метод, который при выполнение некоторых условий должен создать новый объект по той же ссылке что и предыдущий объект. Поясню на примере:


class myclass{
private function remake(){
if(<cond>){
$this=new myclass();
}
}
}

$obj=new myclass();
$obj->remake(); // хочу чтобы тут в переменной obj появился новый объект того же класса.

Однако при таком раскладе пхп выдает ошибку что нельзя переназначить переменную $this. Что делать?

https://handy-tools.io (https://handy-tools.io) - Набор полезных утилит для всех!
F
На сайте с 17.07.2012
Offline
66
#1

назвать переменную по-другому, $this так использовать нельзя

DavyJohnes
На сайте с 05.01.2011
Offline
84
#2
Feetz:
назвать переменную по-другому, $this так использовать нельзя

Перечитайте еще раз вопрос, вы вероятно не поняли его суть.

M
На сайте с 19.01.2011
Offline
65
#3

Здравый смысл подсказывать что пересоздать самого себя нельзя.

________________________ я больше не хостер ....
siv1987
На сайте с 02.04.2009
Offline
427
#4

Вы вероятно не понимаете ооп, $this это указатель внутри объекта, его "свойств". Вам правильно говорят использовать для этого переменную.

dma84
На сайте с 21.04.2009
Offline
168
#5
Swhile
На сайте с 02.05.2007
Offline
58
#6
DavyJohnes:
Имеется некий класс classname, у класса должен быть метод, который при выполнение некоторых условий должен создать новый объект по той же ссылке что и предыдущий объект. Поясню на примере:

class myclass{
private function remake(){
if(<cond>){
$this=new myclass();
}
}
}

$obj=new myclass();
$obj->remake(); // хочу чтобы тут в переменной obj появился новый объект того же класса.

Однако при таком раскладе пхп выдает ошибку что нельзя переназначить переменную $this. Что делать?

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

Чем не подходит clone? И еще - вы пытаетесь к приватному методу обратиться снаружи, это невозможно.


class MyClass
{
public function remake()
{
if(<cond>)
{
return new static;
}
else
{
return $this;
}
}
}

$obj=new MyClass();
$obj = $obj->remake();
rbbumfirst
На сайте с 03.04.2009
Offline
87
#7

Очень похоже на то,что вам необходима фабрика класса(ов).

тогда никак не "private"

myClass {


public static function NewObj(){
return new myClass();
}

}

$obj1 = myClass::NewObj();

//an other object
$obj2 = myClass::NewObj();
Web developer (http://rudov.com). разработка на Go, ReactJS, React Native

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий