我可以在PHP的类级别声明一些全局的东西吗?

时间:2009-09-23 03:05:13

标签: php scope

有没有办法在类中设置一个全局的东西,并让该类的所有方法都可以访问它?目前,如果我使用全局$ session; ,我必须将它添加到使用它的每个方法中,即使所有方法都在同一个类中。

如果我尝试将它直接添加到类中,那么我会得到一个php错误,说它期待一个函数

global $session;

这是一个更好的例子......

class test{
    function test1(){
        $self->test2($var);
    }

    function test2($var){
        return $var
    }
}

在这种情况下,我收到此错误,我是否需要使用全局或什么? 致命错误:在非对象上调用成员函数test2()

3 个答案:

答案 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);