PHP类中的可变范围

时间:2010-12-07 03:24:58

标签: php scope

如何在此课程中设置全局变量?我试过这个:

class myClass
{
   $test = "The Test Worked!";
   function example()
   {
      echo $test;
   }
   function example2()
   {
      echo $test." again";
   }
}

无法加载页面完全引用500错误。接下来我尝试了这个:

class myClass
{
   public $test = "The Test Worked!";
   function example()
   {
      echo $test;
   }
   function example2()
   {
      echo $test." again";
   }
}

但是当我打印这两个时,我所看到的只是“再次”抱歉这个简单的问题!

谢谢!

5 个答案:

答案 0 :(得分:19)

可以像这样访问这个变量

echo $this->test;

答案 1 :(得分:8)

如果您想要一个实例变量(仅为该类的实例保留),请使用:

$this->test

(如另一个答案所示。)

如果你想要一个“class”变量,请在前面添加“static”关键字,如下所示:

类变量与实例变量的不同之处在于,从类创建的所有对象实例将共享同一个变量。

(注意访问类变量,使用类名,或'self'后跟'::')

class myClass
{
   public static $test = "The Test Worked!";
   function example()
   {
      echo self::$test;
   }
   function example2()
   {
      echo self::$test." again";
   }
}

最后如果你想要一个真正的常量(不可更改),在前面使用'const'(再次使用'self'加上'::'加上常量的名称(虽然这次省略'$'):

class myClass
{
   const test = "The Test Worked!";
   function example()
   {
      echo self::test;
   }
   function example2()
   {
      echo self::test." again";
   }
}

答案 2 :(得分:5)

class Foo {

    public $bar = 'bar';

    function baz() {
        $bar;  // refers to local variable inside function, currently undefined

        $this->bar;  // refers to property $bar of $this object,
                     // i.e. the value 'bar'
    }
}

$foo = new Foo();
$foo->bar;  // refers to property $bar of object $foo, i.e. the value 'bar'

请从这里开始阅读:http://php.net/manual/en/language.oop5.basic.php

答案 3 :(得分:3)

实际上有两种方法可以从类中或类外访问类中的变量或函数,如果它们请求项是公共的(或在某些情况下受保护)

class myClass
{
   public $test = "The Test Worked!";
   function example()
   {
      echo $this->test;
      // or with the scope resolution operator
      echo myClass::test;
   }
   function example2()
   {
      echo $this->test." again";
      // or with the scope resolution operator
      echo myClass::test." again";
   }
}

答案 4 :(得分:1)

尝试将$this添加到变量的前面;您可以将第二个示例更改为

class myClass {
   public $test = "The Test Worked!";

   function example() {
      echo $this->test;
   }

   function example2(){
      echo $this->test." again";
   }
}