Как получить доступ к переменным из других методов внутри того же класса в PHP? - PullRequest
1 голос
/ 26 ноября 2011

Я попробовал это, но не смог заставить его работать:

class Profile extends CI_Controller {

   public function index() {
      $foo = 'bar';
   }

   public function form_submit() {
      echo $this->index()->foo;
   }

}

Я знаю, что могу сделать переменную доступной для всех методов в классе, объявив ее вне всех методов на уровне класса и объявив ее как общедоступную. Но здесь мне нужно объявить переменную внутри одного из методов.

Ответы [ 2 ]

2 голосов
/ 26 ноября 2011

Если вы объявляете его внутри метода, вам не повезет, если вы не вернете значение.

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;
   }

}
0 голосов
/ 26 ноября 2011

Нет! Ни в коем случае нельзя представить, что доступ к переменной в другом методе полезен или необходим.

Класс - это набор методов, которые работают с общим состоянием. Общее состояние создается путем создания экземпляра объекта класса.

Поскольку index() и form_submit() имеют общее состояние $foo, ваш код должен выглядеть следующим образом:

class Profile extends CI_Controller {

   private
     $foo;

   public function index() {
      $this->foo = 'bar';
   }

   public function form_submit() {
      echo $this->foo;
   }

}

В определенных ситуациях может быть полезен шаблон реестра . Но не в вашем случае.

Кроме того, вы можете поднять $foo в глобальную область. Но так как это очень плохой стиль , я не хочу приводить пример кода. К сожалению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...