2013-03-13 2 views
0

у меня есть проблемы в глобальные переменные внутри функцийв глобальные переменные внутри функций

<?php 
    function main(){ 
     $var = "My Variable"; 
     function sub() { 
      GLOBAL $var; 
      echo $var; // Will show "My Variable" 
     } 
     sub(); 
     echo $var; // Will show "My Variable" 
    } 
    main(); 
    sub(); // Will not show and I will sub() cant use outside main() function 
?> 
  1. Я просто хочу глобальной $var внутри подфункции
  2. sub() не будет работать за пределами main() функцию

Я привязался к использованию GLOBAL, но он ничего не показывает ... Любой?

+0

определить переменную вне функции? –

+0

yes, outside 'main()' @NullPointer – l2aelba

+0

Все функции и все переменные внутри 'main()' не будут работать за пределами 'main()' @NullPointer – l2aelba

ответ

1

Не уверен, если я понимаю, что вы хотите, но ваш $var не Глобальный. его локальная переменная внутри main()

переменная является глобальной, если вы объявляете ее вне функции или класса.

<?php 
    $var = "My Variable"; // made $var global 
    function main(){ 
     //removed $var here 
     function sub() { 
      global $var; 
      echo $var; // Will show "My Variable" 
     } 
     sub(); 
     echo $var; // Will throw notice: Undefined variable: var 
    } 
    main(); 
    sub(); // Will show "My Variable" 
?> 

Почему бы вам не объявить способ внутри метода, чтобы позвонить ему оттуда?

может быть что-то вроде этого является то, что вы хотите ...

<?php 
    //$var = "My Variable"; 
    function main(){ 
     $var = "My Variable"; 
     $sub = function($var) { 
      echo "sub: ".$var; // Will show "sub: My Variable" 
     }; 
     $sub($var); 
     echo "main: ".$var; // Will show "main: My Variable" 
    } 
    main(); 
    // sub(); // Will not work 
    // $sub(); // Will not work 
?> 
+0

Спасибо, я думаю, что последнее нормально для меня – l2aelba

+0

Я рад, что смогу помочь. – Dodge

1

Вы не оцениваете значение глобальной переменной области $var.
Только main() присваивает значение переменной с именем $var, но только в области main(). И только main()echo $var; действительно печатает значение. Оба вызова sub() не выдают вывод.
попробовать с

<?php 
function main(){ 
    $var = "My Variable"; 
    function sub() { 
     GLOBAL $var; 
     echo 'sub: ', $var, "\n"; 
    } 
    sub(); 
    echo 'main: ', $var, "\n"; 
} 
main(); 
sub(); 

выход

sub: 
main: My Variable 
sub: 

и пожалуйста прочитанный из https://en.wikipedia.org/wiki/Dependency_injection ;-)

+0

Хорошо, в вашем примере я вывешу «Sub: My Variable, main: My Variable, sub:» – l2aelba

+0

1. последняя строка 'sub()' не будет работать, потому что эта функция находится вне 'main()' – l2aelba

+0

2 . 'echo 'sub:', $ var," \ n ";' <--- покажет $ var тоже – l2aelba

Смежные вопросы