如何从PHP中的同一个类中的其他方法访问变量?

时间:2011-11-26 00:08:41

标签: php oop codeigniter

我试过这个但是无法让它起作用:

class Profile extends CI_Controller {

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

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

}

我知道我可以通过在类级别的所有方法之外声明它并将其声明为public来使类中的所有方法都可以访问该变量。但是在这里我需要在其中一个方法中声明变量。

2 个答案:

答案 0 :(得分:2)

如果你在方法中声明它,除非你返回值,否则你运气不好。

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

}

答案 1 :(得分:0)

否!在任何情况下,都可以想象在另一种方法中访问变量是有用的或必要的。

类是在共享状态下运行的方法的集合。通过实例化类的对象来创建共享状态。

由于index()form_submit()共享$foo状态,因此您的代码应如下所示:

class Profile extends CI_Controller {

   private
     $foo;

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

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

}

在某些情况下,registry pattern可能会有所帮助。但不是你的情况。

或者,您可以将$foo提升到全局范围。但由于这是非常糟糕的风格,我不愿意提供代码示例。遗憾。