有没有办法在类中设置一个全局的东西,并让该类的所有方法都可以访问它?目前,如果我使用全局$ session; ,我必须将它添加到使用它的每个方法中,即使所有方法都在同一个类中。
如果我尝试将它直接添加到类中,那么我会得到一个php错误,说它期待一个函数
global $session;
这是一个更好的例子......
class test{
function test1(){
$self->test2($var);
}
function test2($var){
return $var
}
}
在这种情况下,我收到此错误,我是否需要使用全局或什么? 致命错误:在非对象上调用成员函数test2()
答案 0 :(得分:3)
我可能误解了这个问题,但我认为你想要的是一个实例变量:
<?php
class Foo {
var $bar = "blue"
function output() {
echo $this->bar . "\n";
}
function a() {
$this->bar = "green";
}
function b() {
$this->bar = "red";
}
}
?>
在这种情况下,$bar
是实例变量,可从每个方法访问。以下代码,使用Foo类:
$newFoo = new Foo();
$newFoo->output();
$newFoo->a();
$newFoo->output();
$newFoo->b();
$newFoo->output();
将创建以下输出:
blue
green
red
答案 1 :(得分:3)
有不同的方法可以做到这一点,
<?php
class test{
private $p_var;
public static $s_var;
function test(){
$this->p_var="RED";
self::$s_var="S_RED";
}
function test1(){
return $this->test2($this->p_var);
}
function test2($var){
return $var;
}
function test3($var){
$this->p_var=$var;
}
function stest1(){
return $this->test2(self::$s_var);
}
function stest2($var){
return $var;
}
function stest3($var){
self::$s_var=$var;
}
}
?>
Heere $ objtest是test()类的对象:
$objtest=new test();
echo $objtest->test1(),"<br/>";
$objtest->test3("GREEN");
echo $objtest->test1(),"<br/>";
echo "<br/>";
echo $objtest->stest1(),"<br/>";
$objtest->stest3("S_GREEN");
echo $objtest->stest1(),"<br/>";
test::$s_var="S_BLUE";
echo $objtest->stest1();
会创建以下输出
RED
GREEN
S_RED
S_GREEN
S_BLUE
使用静态变量(test :: $ s_var)可以实现您想要的效果。 如果您对self和$ this有任何疑惑,那么您可以阅读此document
答案 2 :(得分:2)
您收到错误是因为您使用的是self
而不是this
。
即
$this->test2($var);