2013-07-20 45 views
1

我在運行alertError()時遇到了一個問題,它似乎很好,並且存在對$ errors的訪問,但是在運行showErrors()時,它告訴我該變量是未定義的。 「未定義的變量:錯誤的」php中的變量作用域

$errors = array(); 

function alertError($error){ 
    $errors[] = $error; 
    echo $errors[count($errors)-1]; 
} 

function showErrors(){ 
     echo "<html> 
       <head> 
        <title>Error occurred!</title> 
       </head> 
       <body>"; 
       foreach($errors as $error){ 
        echo $error."<br>"; 
       } 
     echo " 
       </body> 
      </html>"; 
    die(); 
} 

爲什麼alertError()似乎知道$錯誤的定義,並showErrors()有麻煩訪問他嗎?

+0

閱讀[文檔中的變量範圍](http://php.net/language.variables.scope)。它解釋了一切。 – Gumbo

+2

這是拋出錯誤的奇怪方法 –

+0

PHP作用域不會繼承。如果你已經習慣了一種更爲理智的編程語言,那麼你就會陷入困境。 – Boann

回答

1

在showErrors的)

global $errors; 

的第一行(這將要給你進入全球$錯誤添加這一行,你上面的功能

宣佈更新

由於mantioned在評論中購買Alien和Neil Neyman先生 - 它是一種牀上做法.. 如果您打算爲更復雜的系統編寫一些php程序 - 您應該瞭解所示的OOP概念ñ他們的鏈接和評論。

祝你好運!

+2

Yuks no ...不建議使用全局符號 –

+0

爲什麼不呢?函數裏面沒有聲明變量 –

+1

[爲什麼不是](https://www.google.com/search?q=why+not+use+global&ie=utf-8&oe=utf-8&aq=t&rls=org。 Mozilla瀏覽器:EN-US:官方與客戶端=火狐-A)? –

4

傳失誤,以showErrors()

function showErrors($errors){ 
    ... 
} 

您可能需要像你這樣的代碼

$errors = alertError($error); 
showErrors($errors); 

function alertError($error){ 
    $errors[] = $error; 
    echo $errors[count($errors)-1]; 
    return $errors; 
} 

function showErrors($errors){ 
     echo "<html> 
       <head> 
        <title>Error occurred!</title> 
       </head> 
       <body>"; 
       foreach($errors as $error){ 
        echo $error."<br>"; 
       } 
     echo " 
       </body> 
      </html>"; 
    die(); 
} 
2

當函數'alertError()運行時,它並不知道全局變量$錯誤什麼。它每次創建新的變量$錯誤。 因此,它能正常工作,但不是你想要的。在showErrors中,這個變量沒有被聲明,所以你會得到一個通知。 您可以在每項功能中使用聲明global $ errors,但這是一種不好的做法。