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();
?>