Я пробовал это, но не мог заставить его работать:
class Profile extends CI_Controller { public function index() { $foo = 'bar'; } public function form_submit() { echo $this->index()->foo; } }
Я знаю, что могу сделать переменную доступной для всех методов в классе, объявив ее вне всех методов на уровне класса и объявив ее общедоступной. Но здесь мне нужно объявить переменную внутри одного из методов.
Если вы объявляете его внутри метода, вам не повезло, если вы не вернете значение.
class Profile { public function index() { $foo = 'bar'; return $foo; } public function form_submit() { echo $this->index(); } }
Возможно, лучшей альтернативой было бы объявить ее как переменную объекта (что вы называете «на уровне класса»), но объявите ее закрытой.
class Profile { private $foo; public function index() { $this->foo = 'bar'; } public function form_submit() { echo $this->foo; } }
Нет! Ни в коем случае нельзя представить, что доступ к переменной в другом методе полезен или необходим.
Класс представляет собой набор методов, которые работают в общем состоянии. Совместное состояние создается путем создания экземпляра объекта класса.
Поскольку index()
и form_submit()
совместно используют состояние $foo
, ваш код должен form_submit()
следующим образом:
class Profile extends CI_Controller { private $foo; public function index() { $this->foo = 'bar'; } public function form_submit() { echo $this->foo; } }
В некоторых ситуациях шаблон реестра может оказаться полезным. Но не в вашем случае.
Кроме того, вы можете поднять $foo
в глобальную область. Но так как это очень плохой стиль , я не хочу приводить пример кода. Сожалею.