从类中访问全局变量

时间:2009-12-09 21:46:43

标签: php

我有以下(剥离)代码:

<?PHP
    class A {
        function Show(){
            echo "ciao";
        }
    }

    $a = new A();
    $b = new B();

    class B {
        function __construct() {
            $a->Show();
        }
    }
?>

有点意外,我无法从类中访问全局定义的$ a变量,我得到一个 Undefined variable 异常。有什么帮助吗?

4 个答案:

答案 0 :(得分:18)

请不要使用建议的全局方法。这让我肚子疼。

将$ a传递给B的构造函数。

class A {
    function Show(){
            echo "ciao";
    }
}

$a = new A();
$b = new B( $a );

class B {
    function __construct( $a ) {
        $a->Show();
    }
}

答案 1 :(得分:6)

您需要在要使用它的函数范围内将其定义为global variable

function __construct() {
    global $a;
    $a->Show();
}

答案 2 :(得分:5)

为何惊喜?那是一个非常合理的变量范围问题......

我建议您使用global关键字或变量$GLOBALS来访问您的变量。

编辑:因此,在您的情况下将是:

global $a;
$a->Show();

$GLOBALS['a']->Show();

编辑2:而且,由于Vinko是对的,我建议你看一下关于variable scope的PHP手册。

答案 3 :(得分:0)

<?php
class A {
    public function Show(){
      return "ciao";
    }
}

class B {
    function __construct() {
        $a = new A();
        echo $a->Show();
    }
}

$b = new B();
?>