2013-03-13 98 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

定義的函數變量之外? – 2013-03-13 08:20:00

+0

是的,在main()外'@NullPointer – l2aelba 2013-03-13 08:20:39

+0

'main()'裏面的所有函數和所有變量都不會在'main()'外面工作@NullPointer – l2aelba 2013-03-13 08:21:54

回答

1

不知道讀如果我理解你想要什麼,但你的$var不全球。它的一個局部變量主要是()

一個變量只是全局的,如果你聲明它在一個函數或類之外。

<?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 2013-03-13 08:33:53

+0

我很高興我能幫上忙。 – Dodge 2013-03-13 08:35:46

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:我的變量,主:我的變量,子:」 – l2aelba 2013-03-13 08:29:11

+0

1.最後一行'sub()'不起作用,因爲這個func在'main()'外面 – l2aelba 2013-03-13 08:30:24

+0

2 。'echo'sub:',$ var,「\ n」;'<---也會顯示$ var – l2aelba 2013-03-13 08:31:14