2013-02-18 140 views
0

好了,這裏是我的代碼:未定義的變量+函數沒有返回變量

function payCalc($hours, $wage, $overtime, $paycheck) { 
if ($hours <= 40) { 
    $paycheck = $hours * $wage; 
} 
else { 
    $paycheck = $hours * $overtime; 
} 
return $paycheck; 

} 

$name = $_POST['name']; 
$dept = $_POST['dept']; 
$hours = $_POST['hours']; 
$wage = $_POST['wage']; 

$paycheck = payCalc($hours, $wage, $overtime, $paycheck); 

$overTime = $wage * 1.5; 
print "Your paycheck for this period is:"; 
print $paycheck; 
print "."; 

的問題是我一直在$片酬越來越不確定變量的錯誤。據我所知,我有if/else設置正確,但它不返回$paycheck。這意味着在「print $paycheck;」行上,它無法打印。我錯過了什麼?

編輯:還有更多,但它只是回聲線吐出$name$dept變量。

+2

$小時,$工資和加班費$不要你的函數的範圍內,存在 - 它們作爲參數傳遞;你也不是在任何地方調用payCalc()函數;並且在那個函數中,你沒有做任何事情來更新$ paycheck – 2013-02-18 09:40:16

+2

的值,你似乎沒有在任何地方調用'payCalc()'函數? – 2013-02-18 09:41:31

+0

閱讀[PHP的:變量範圍](http://php.net/manual/en/language.variables.scope.php) - 函數不會關閉這樣的變量。 – cmbuckley 2013-02-18 09:41:45

回答

3

需要聲明

$paycheck = payCalc(); 

這樣就可以得到來自函數的結果。

還拿在考慮:

if ($hours <= 40) { 
    $paycheck = $hours * $wage; 
} 
else { 
    $paycheck = $hours * $overtime; 

就是填充$薪水。

最後,考慮到東西已被告知其他用戶:如果你想使用外部變量,你需要將它們發送到功能:

function payCall($hours, $wage, $overtime) { 
    ... 
} 

,然後用它們在調用函數時:

$paycheck = payCalc($hours, $wage, $overtime); 
+0

我做了所有這些,現在我得到了所有變量的'未定義索引'和'未定義變量'錯誤。 – Pachi 2013-02-18 10:00:44

+0

請在問題中更新您的代碼,以便我們可以查看現在可能出現的問題。 – fedorqui 2013-02-18 10:02:33

+0

OK @ user2082686,你需要做的是定義之前調用它的函數。也就是說,所有的程序塊都是從'function payCalc'開始($ hours,$ wage,$ overtime,$ paycheck){'並在'return $ paycheck中完成; }'必須移動到文件的頂部。 – fedorqui 2013-02-18 10:09:16

0

在函數中,您不能從外部調用變量。

有沒有辦法,你的函數知道$paycheck.

做這樣的:

function payCall($hours, $wage, $overtime, $paycheck) { 
//DO STUFF 
return $paycheck; 
} 

,並調用它像這樣:

echo payCall($hours, $wage, $overtime, $paycheck); 
-1

嘗試使用全局關鍵字。

$paycheck = ''; 
$name = $_POST['name']; 
$dept = $_POST['dept']; 
$hours = $_POST['hours']; 
$wage = $_POST['wage']; 

$overTime = $wage * 1.5; 

function payCalc() { 
    global $hours,$wage,$overtime,$paycheck; 
    if ($hours <= 40) { 
     $hours * $wage; 
    } 
    else { 
     $hours * $overtime; 
    } 
    return $paycheck; 
} 
0

試試這個:

if(isset($_POST['name']) && isset($_POST['dept']) && isset($_POST['hours']) && isset($_POST['wage']){ 
    $paycheck = ''; 
    $name = $_POST['name']; 
    $dept = $_POST['dept']; 
    $hours = $_POST['hours']; 
    $wage = $_POST['wage']; 

    $overTime = $wage * 1.5; 

    function payCalc() { 
     if ($hours <= 40) { 
     $paycheck =$hours * $wage; 
    } 
    else { 
     $paycheck = $hours * $overtime; 
    } 
    return $paycheck; 
} 

print "Your paycheck for this period is:"; 
print payCalc(); 
print "."; 
} 
-1

您需要使用全球關鍵字來引用全局變量:

$paycheck = ''; 
$name = $_POST['name']; 
$dept = $_POST['dept']; 
$hours = $_POST['hours']; 
$wage = $_POST['wage']; 

$overTime = $wage * 1.5; 

function payCalc() { 
    global $hours, $wage, $overtime; 
    $paycheck = 0; 
    if ($hours <= 40) { 
     $paycheck = $hours * $wage; 
    } 
    else { 
     $paycheck = $hours * $overtime; 
    } 
    return $paycheck; 
} 


$paycheck = payCalc(); 
print "Your paycheck for this period is:"; 
print $paycheck; 
print "."; 
+2

這顯然是PHP的新用戶 - 讓我們從一開始就不建議這樣糟糕的做法。 – cmbuckley 2013-02-18 09:49:39

+0

@cbuckley我確實對此很陌生。在這一點上,我不知道如何處理全局變量,我寧願知道什麼是錯的(我是通過閱讀所有這些),而不是僅僅在不知道它做什麼的情況下將它(全局)放入。 – Pachi 2013-02-18 10:04:43

+0

請參閱http://php.net/manual/en/language.variables.scope.php – 2013-02-18 10:09:12

0

好了,你還沒有真正設置變量「月光「在你的功能。

在您的$ hours * $加班和$ hours * $工資之前設置變量$ paycheck。

但是,在能夠訪問它們之前,必須將它們設置爲參數。然後

代碼應該是這樣的:

$name = $_POST['name']; 
$dept = $_POST['dept']; 
$hours = $_POST['hours']; 
$wage = $_POST['wage']; 

$overTime = $wage * 1.5; 

function payCalc($hours, $wage, $overtime) { 
    if ($hours <= 40) { 
     $paycheck = $hours * $wage; 
    } 
    else { 
     $paycheck = $hours * $overtime; 
    } 
    return $paycheck; 
} 

print "Your paycheck for this period is:"; 
print payCalc($hours, $wage, $overTime); 
print "."; 

的功能現在返回變量「月光」,這是設置if語句與其他語句中。

這對你有什麼意義嗎?

最佳,

尼古拉·傑普森

0
/// COPY AND PASTE THE BELOW CODE 

$paycheck = ''; 

$name = $_POST['name']; 

$dept = $_POST['dept']; 

$hours = $_POST['hours']; 

$wage = $_POST['wage']; 

$overTime = $wage * 1.5; 

function payCalc($paycheck,$hours,$wage,$overTime) { 

    if ($hours <= 40) { 

     $paycheck = $hours * $wage; 

    } 

    else { 

     $paycheck = $hours * $overTime; 

    } 

    return $paycheck; 

} 


print "Your paycheck for this period is:"; 

print payCalc($paycheck,$hours,$wage,$overTime); 

print ".";