我试过这个但是无法让它起作用:
class Profile extends CI_Controller {
public function index() {
$foo = 'bar';
}
public function form_submit() {
echo $this->index()->foo;
}
}
我知道我可以通过在类级别的所有方法之外声明它并将其声明为public来使类中的所有方法都可以访问该变量。但是在这里我需要在其中一个方法中声明变量。
答案 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
提升到全局范围。但由于这是非常糟糕的风格,我不愿意提供代码示例。遗憾。