Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Access global variable from within a class

Tags:

php

I have the following (stripped down) code:

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

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

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

With a bit of surprise I cannot access the globally defined $a variable from within the class and I get a Undefined variable exception. Any help?

like image 365
pistacchio Avatar asked Dec 09 '09 21:12

pistacchio


3 Answers

Why the surprise? That's a pretty logical variable scope problem there...

I suggest you use either the global keyword or the variable $GLOBALS to access your variable.

EDIT: So, in your case that will be:

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

or

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

EDIT 2: And, since Vinko is right, I suggest you take a look at PHP's manual about variable scope.

like image 172
Franz Avatar answered Oct 26 '22 11:10

Franz


You will need to define it as a global variable inside the scope of the function you want to use it at.

function __construct() {
    global $a;
    $a->Show();
}
like image 31
LiraNuna Avatar answered Oct 26 '22 10:10

LiraNuna


please don't use the global method that is being suggested. That makes my stomach hurt.

Pass $a into the constructor of B.

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

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

class B {
    function __construct( $a ) {
        $a->Show();
    }
}
like image 44
Galen Avatar answered Oct 26 '22 11:10

Galen