2011-05-19 59 views
2

我是一個PHP新手,所以我有一個小問題函數。 我有這行代碼:未定義PHP函數的變量問題

<?php 
$ime=$_POST["ime"]; 
$prezime=$_POST["prezime"]; 
$pera="string"; 
if (empty($ime)||empty($prezime)){ 
    echo "Ne radi, vrati se nazad i unesi nesto!"; 
} 
function provera($prom){ 
    if (preg_match("/[0-9\,\.\?\>\.<\"\'\:\;\[\]\}\{\/\!\\\@\#\$\%\^\&\*\(\)\-\_\=\+\`[:space:]]/",$prom)){ 
     echo "Nepravilan unos imena ili prezimina!"; 
     echo $pera; 
     } 
} 
provera($ime); 
provera($prezime); 
?> 

無論如何,當我嘗試這個代碼,我總是得到一個錯誤消息說,有上線11(代碼的粗體部分)錯誤和沒有變量呼應。我猜測它給了我這個錯誤,因爲我的變量沒有在該函數內部定義,但我需要在函數外部定義它,所以有辦法做到這一點?

+0

可你過去的全功能「 provera「 – 2011-05-19 12:46:02

+0

使用格式化功能,以便我們實際上可以毫無問題地看到您的代碼,這使得它更容易幫助。 – 2011-05-19 12:46:19

+2

順便提一句,您可能會從通過[PHP手冊的教程](http://www.php.net/manual/en/tutorial.php)部分獲得幫助,因爲它涵蓋了很多這類問題。 – 2011-05-19 13:09:14

回答

11

這是因爲你使用的$pera變量(只存在於全球範圍內)的函數裏面。

有關更多信息,請參閱PHP manual page on variable scope

你可以通過在你的函數中加入global $pera;來解決這個問題,雖然這不是一個特別優雅的方法,因爲全局變量因爲太詳細的原因而被忽略掉了。因此,這將是更好的接受$pera作爲參數傳遞給你的函數如下:

function provera($prom, $pera){ 
    if (preg_match("/[0-9\,\.\?\>\.<\"\'\:\;\[\]\}\{\/\!\\\@\#\$\%\^\&\*\(\)\-\_\=\+\`[:space:]]/",$prom)){ 
     echo "Nepravilan unos imena ili prezimina!"; 
     echo $pera; 
     } 
} 
+0

我嘗試使用$ pera作爲函數參數,但是現在我得到的錯誤是我的provera()的第二個參數缺失,$ pera未被識別。 – Mentalhead 2011-05-19 13:03:05

+1

@Mentalhead - 我的歉意 - 當你調用函數時,你需要提供變量作爲參數。即:'provel($ ime,$ pera);'和'provera($ prezime,$ pera);'。希望這可以幫助。 – 2011-05-19 13:08:12

+0

非常感謝您澄清這一點。 – Mentalhead 2011-05-19 17:08:09

1

聽起來你沒有在你的$ pera變量中設置任何東西。 如果您必須在函數外部定義變量,請嘗試將其值作爲參數傳遞給函數。

function echoMyVar($myVar) 
{ 
    echo $myVar; 
} 


$p = "toto"; 
echoMyVar($p); 
1

您不能在方法中使用$pera,因爲它沒有在方法範圍內定義。

如果您想使用該方法,請將其作爲參數傳遞。

function provera($prom, $pera){ //passed as a param 
    if (preg_match("/[0-9\,\.\?\>\.<\"\'\:\;\[\]\}\{\/\!\\\@\#\$\%\^\&\*\(\)\- \_\=\+\`[:space:]]/",$prom)){ 
     echo "Nepravilan unos imena ili prezimina!"; 
    echo $pera; 
} 
+0

之前嘗試過,現在我有三個錯誤2x缺少第14行provera()的參數2和第11行未定義變量:pera – Mentalhead 2011-05-19 12:52:20

+1

@Mentalhead - 正如middaparka已經指出的那樣,您應該使用2個參數provera ($ ime,$ pera) – martinstoeckli 2011-05-19 14:13:21

1

在你的函數功能孕酮($ PROM)添加一行說

global $pera;