Проведено исследование, не найдено ответа.Объектно-ориентированный php - возврат к предыдущему объекту
Допустим, у меня есть эти два класса:
class foo {
function create_boo() {
$boo = new boo($this); // creates boo
return $boo; // returns boo object
}
function a() {
//Do something complex here in class foo
return $this;
}
function b() {
//Do something complex here in class foo
return $this;
}
function c() {
//Do something complex here in class foo
return $this;
}
}
class boo {
private $prev;
function boo ($prev) { // Constructor
$this->prev = $prev; //In my theory, this saves the previous object, so I can return to it, but doesnt work.
//do something
}
function a() {
//Do something complex in class boo
return $this;
}
function b() {
//Do something complex in class boo
return $this;
}
function c() {
//Do something complex in class boo
return $this;
}
function return_to_foo() {
return $this->prev; // should return back to previous object?
}
}
Теперь, позвольте мне объяснить мою проблему и то, что я хочу сделать. Я могу легко создать класс Foo:
$foo = new foo();
И я могу использовать функции там
$foo->a()->c();
Он использует в настоящее время функции а затем с. Я могу поставить заказ рядом друг с другом. Предположим, я хочу создать boo и использовать функции там тоже.
$foo->create_boo()->b()->c();
Итак, я создал бу и использую материал там. Но скажем, теперь я хочу вернуться в предыдущее дерево, не закончив командную строку и вернусь с одной командой, поэтому вместо этого он начнет использовать команды foo?
$foo->create_boo()->b()->c()->return_to_foo(); //Next commands are from foo tree;
Возможно ли это, и если да, то как я могу это сделать?
В то время как я понимаю, ты написал этот пример в спешке, то неясно, что вы пытаетесь сделать, и поэтому трудно помочь. –
'$ boo' будет локальной переменной внутри метода, созданной и уничтоженной при каждом вызове метода. Если вы хотите, чтобы этот новый объект $ boo каким-то образом был сохранен в объекте-контейнере, вам придется вместо этого '$ this-> boo'. –
@Elven Можете ли вы изменить 'new $ boo' на' new boo' свой бит, запутывающий. –