简体   繁体   中英

PHP global variable is undefined inside a function even if global keyword is used

Yes I know global variables is a bad practice, but ease up on that rule for this one :P

My code:

include('something.php'); //where $from is declared

function myfunc() {
    global $from;
    echo "from(myfunc)=$from<br />";
    ...
}

echo "from=$from<br />";
myfunc();

The result is:

from=2010-05-01
from(myfunc)=

What's going on? :(

EDIT: If it helps, all the code above is inside a view file in CodeIgniter ( and yes, I know functions are not supposed to be inside views :P )

I'll bet a beer you are not inside the global scope with this snippet. Are you calling this from within a function?

In that case, the $from you define in something.php is not global, while the one you reference in the function is.

It will probably work if you add a global $from; inside something.php before you define $from .

Needless to say, it's not a nice practice either way, and you should follow Gordon's advice.

Do yourself a favor and use Dependency Injection.

function myfunc($from) {
    return "from(myfunc)=$from<br />";
}
$from = '2010-05-01';
echo myfunc($from);

Doing so will make your code more maintainable, less coupled and more easily unit-testable because it is isolated from the global scope. Plus, when you do it people think you are cool.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM