Да я знаю, что глобальные переменные являются плохой практикой, но ослабьте то правило для этого :P
Мой код:
include('something.php'); //where $from is declared
function myfunc() {
global $from;
echo "from(myfunc)=$from<br />";
...
}
echo "from=$from<br />";
myfunc();
Результат:
from=2010-05-01
from(myfunc)=
Что продолжается?:(
Править: Если это помогает, весь код выше в файле представления в CodeIgniter (и да, я знаю, что функции, как предполагается, не являются внутренними представлениями :P)
Готов поспорить на пиво, что в этом фрагменте вы не находитесь в глобальной области видимости. Вы вызываете его из функции?
В таком случае, $from
, который вы определяете в something.php
, не является глобальным, а тот, на который вы ссылаетесь в функции - является.
Возможно, это сработает, если вы добавите global $from;
внутри something.php
перед определением $from
.
Нет нужды говорить, что это не очень хорошая практика в любом случае, и вы должны следовать совету Гордона.
Сделайте себе одолжение и используйте Dependency Injection.
function myfunc($from) {
return "from(myfunc)=$from<br />";
}
$from = '2010-05-01';
echo myfunc($from);
Это сделает ваш код более сопровождаемым, менее связанным и более легко поддающимся юнит-тестированию, поскольку он изолирован от глобальной области видимости. Кроме того, когда вы это делаете, люди думают, что вы крутой.