使用全局变量

时间:2011-06-13 01:01:13

标签: php

  

可能重复:
  To pass value of a variable in one function to another function in same class

使用PHP中的“GLOBAL”,可以在同一个类的另一个函数中使一个函数中的变量值可用。如果是这样,请建议如何使用Global实现这一目标。

3 个答案:

答案 0 :(得分:5)

如果你在一个对象中,你不需要创建一个变量GLOBAL。

class myClass {

  public $myVar = "Hello";

  function myFunction() { 
    echo $this->$myVar;
  }

}

这是对象的要点之一 - 您可以为变量分配不同的值,并在不同的方法中获取/设置这些变量。此外,您还可以创建多个对象实例,每个对象在同一结构中保存不同的信息,并使用相同的方法。

答案 1 :(得分:2)

除了@Codecraft所说的(关于使用公共属性),你可以使用:

  • 确实是全局变量(这是你应该避免做的事情),
  • 在参数中传递值
  • 类中的静态变量

以下是使用静态变量(私有)的示例,因为我认为这最符合您的需求:

class MyClass {
    private static $_something;
    public function write() {
        static::$_something = 'ok';
    }
    public function read() {
        return static::$_something;
    }
}

$x = new MyClass();
$x->write();
var_dump($x->read());

输出:

  

string(2)“ok”

这实际上是类似于全局的内容,但只能从您的类中获取(因为关键字“私有”)和班级的每个实例。如果使用设置某些非静态属性,它将在类的不同实例中更改(一个对象可能存储的值不同于另一个对象)。

基于静态和非静态变量的解决方案比较:

基于静态变量的解决方案将为您提供真正的类似全局的行为(在同一个类的不同实例中传递的值):

class MyClass {
    private static $_something;
    public function write() {
        static::$_something = 'ok';
    }
    public function read() {
        return static::$_something;
    }
}

// first instance
$x = new MyClass();
$x->write();
// second instance
$y = new MyClass();
var_dump($y->read());

输出:

  

string(2)“ok”

基于非静态变量的解决方案如下所示:

class MyClass {
    private $_something;
    public function write() {
        $this->_something = 'ok';
    }
    public function read() {
        return $this->_something;
    }
}

// first instance
$x = new MyClass();
$x->write();
// second instance
$y = new MyClass();
var_dump($y->read());

但会输出:

  

NULL

这意味着在这种情况下,第二个实例没有为您希望表现为“全局”的变量分配值。

答案 2 :(得分:0)

是的,一个函数中的变量值可以使用“GLOBAL”在同一个类的另一个函数中可用。以下代码打印3

class Foo
{
  public function f1($arg) {
    GLOBAL $x;
    $x = $arg;
  }
  public function f2() {
    GLOBAL $x;
    return $x;
  }
}

$foo = new Foo;
$foo->f1(3);
echo $foo->f2();

然而,全局变量的使用通常表明设计不佳。

请注意,虽然PHP中的关键字不区分大小写,但可以自定义使用小写字母。还不是包含所有全局变量的超全局数组被称为$GLOBALS,而不是GLOBAL