Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从类中访问全局变量_Php - Fatal编程技术网

Php 从类中访问全局变量

Php 从类中访问全局变量,php,Php,我有以下(精简)代码: 有点惊讶的是,我无法从类中访问全局定义的$a变量,我得到了一个未定义的变量异常。有什么帮助吗?您需要将其定义为要在其上使用的函数范围内的 function __construct() { global $a; $a->Show(); } 为什么会有惊喜?这是一个相当合理的变量范围问题 我建议您使用global关键字或变量$GLOBALS来访问您的变量 编辑:因此,在您的情况下: global $a; $a->Show(); 或 编辑2:

我有以下(精简)代码:



有点惊讶的是,我无法从类中访问全局定义的$a变量,我得到了一个未定义的变量异常。有什么帮助吗?

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

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

为什么会有惊喜?这是一个相当合理的变量范围问题

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

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

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


编辑2:而且,既然Vinko是对的,我建议您看看PHP的手册。

请不要使用所建议的全局方法。那使我胃痛

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

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

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

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


对于习惯于隐式继承作用域的语言(如C)的人来说,这是令人惊讶的。这确实是更好的方法。不过,在这个例子中,为什么B不扩展A?@roberthuttinger-这完全取决于这两个类之间的关系。@robertthuttinger:要扩展Galen所说的内容。。。因为您可能不希望B继承A的所有方法。在这个特定的实例中,这样会产生相同的结果,但是如果您向a添加了一个构造函数方法,而该方法对B产生了一个不需要的值,该怎么办?根据对象的复杂性,它可能会造成更大的混乱。
$GLOBALS['a']->Show();
class A {
    function Show(){
            echo "ciao";
    }
}

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

class B {
    function __construct( $a ) {
        $a->Show();
    }
}
<?php
class A {
    public function Show(){
      return "ciao";
    }
}

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

$b = new B();
?>