PHP global variable is undefined inside a function even if global keyword is used
Solution 1
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.
Solution 2
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.
Francesco Mangia
Updated on July 08, 2020Comments
-
Francesco Mangia almost 4 years
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 )
-
Pekka almost 14 years+1 I've never realized I can say "I've being doing dependency injection since 2002" :)
-
Francesco Mangia almost 14 yearsHi Pekka, you're right. I added
$GLOBALS['from'] = 'value'
outside the function, and the value was found insidemyfunc()
. I didn't realize this page was generated by CodeIgniter's$this->load->view()
function. Thanks! -
Francesco Mangia almost 14 yearsThanks, I'll be using Dependency Injection instead :P