Вопрос портирования от php 4 до 5 о том, как сбросить класс - PullRequest
2 голосов
/ 06 августа 2009

Кто-то написал следующий код php4, который я сейчас пытаюсь перенести на php5:

класс Foo (имя изменено для защиты виновных). В одном из методов мы назовем его save (), класс, по-видимому, сбрасывается следующим образом:

$this = new Foo($this->Foo_Id);

Это приводит к следующей ошибке:

( ! ) Fatal error: Cannot re-assign $this in ...

Моя идея состоит в том, чтобы исправить это следующим образом, но я обеспокоен тем, что это может быть не так:

$this->Foo($this->Foo_Id);

PHP больше не генерирует ошибку разбора / фатальной ошибки, когда я включаю класс, но, как я уже сказал, я собираюсь добиться того же, что и конструкция php4?

Ответы [ 2 ]

2 голосов
/ 06 августа 2009

Не зная контекста, в котором организованы занятия, трудно сказать вам правильное решение.

В зависимости от этого, вы можете просто сделать:

return new Foo($this->Foo_Id);

Код, который вызывает метод "save", получит экземпляр Foo. Со стороны это может выглядеть так:

Befor:

$instance->save($ID);
$instance->methodFromClassFoo(); # Instance would be now of class foo. (which btw. is really bad design.

после

$foo = $instance->save($ID);
$foo->methodFromClassFoo();

или даже:

$instance = $instance->save($ID); // Instance is now instance of foo.
$instance->methodFromClassFoo();

Может быть, это поможет вам.

1 голос
/ 06 августа 2009

Нет, не будет. Это просто перезапустит любой фактический код в конструкторе (который, между прочим, вам, вероятно, следует переименовать в __construct() в любом случае), не затрагивая любые свойства, которые на самом деле не установлены там.

...