php 从类中访问全局变量

jaql4c8m  于 2022-12-28  发布在  PHP
关注(0)|答案(5)|浏览(163)

我有下面的代码:

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

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

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

有点意外的是,我无法从类中访问全局定义的$a变量,并且得到了一个 Undefined variable 异常。

w8biq8rn

w8biq8rn1#

请不要使用所建议的全局方法。那会使我感到胃痛。
将$a传入B的构造函数。

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

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

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

i5desfxk2#

有什么好惊讶的?这是一个很合理的变量作用域问题...
我建议您使用global关键字或变量$GLOBALS来访问您的变量。

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

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

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

**EDIT 2:**而且,既然Vinko是对的,我建议您看一下PHP关于variable scope的手册。

dhxwm5r4

dhxwm5r43#

您需要在要使用它的函数的作用域内将它定义为global variable

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

whitzsjs4#

感谢提问...当然,你的代码是一个精简的非常好的示例代码,答案很简单,在PHP中当你想使用全局变量或类似的变量时,你需要使用global语句将其传递到代码的另一个作用域,例如,在本例中,你应该知道,在函数内部使用的任何变量默认情况下都被限制在局部函数的作用域中,所以你需要声明这个变量是一个全局变量,就像这样:

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

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

    class B {
        function __construct() {
            global $a; //This is the only line you need to add
            $a->Show();
        }
    }
?>

好好享受...

dgsult0t

dgsult0t5#

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

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

$b = new B();
?>

相关问题