2016-07-24 61 views
0

我更喜歡Python語言編程,但在PHP工作對特定網站的應用程序項目。我試圖從函數「返回」一個值到主程序環境(用於後續計算),但不管我嘗試在我的函數中計算的值是不是返回值(但從功能回聲工作正常)。返回變量在PHP不工作(即沒有返回值!)

在Python我從未有過的問題與返回的變量:即從函數返回的所有值都使用和訪問的主要程序和/或其他功能調用產生的返回值的功能。

是否有人可以告訴我怎樣才能解決這個問題呢?我一直在搜索谷歌和網站ike stackoverflow在過去的兩天沒有成功。我有許多O'Reilly計算機書籍,其中包括許多關於PHP的文章,我交叉引用了我的研究成果,並閱讀了有關RETURN函數的所有內容 - 看起來我做的都是正確的,甚至專門聲明要返回的值。能夠返回值並訪問這些值以便繼續進行此項目的開發至關重要 - 否則如果我無法返回要進一步處理的值,我會被卡住!

下面是相關代碼段:

// DECLARE FUNCTIONS 

// FUNCTION 
function Calculation_IsArray ($ArrayAny){ 
    if (is_array($ArrayAny)) { 
     echo '<div>THIS VAR IS AN ARRAY</div>'; 
     $Var_IsArray = TRUE; 
     return $Var_IsArray; 
    } else { 
     echo '<div>THIS VAR IS **NOT** AN ARRAY</div>'; 
    } 

} 

聲明的功能,並做一些初始計算,以搶檢查的陣列後,我調用上述功能如下:

// CALL FUNCTION 
Calculation_IsArray($ArrayOfValues); 

我我希望程序調用函數Calculation_IsArray()並將它傳遞給要檢查的數組($ ArrayOfValues)。您可以從下面的輸出數組被傳遞和檢查,證實是數組類型看,兩者的foreach循環,以及爲IF/ELSE條件,做工精細,並呼應正確的輸出。但是,上面的代碼不會返回任何值,因爲您可以看到在檢查返回值(即,選中的數組)時返回的NULL值,它們在「返回」後可從主程序訪問。

而且這裏的結果回顯到瀏覽器屏幕(輸出):


這VAR是一個數組
返回數組=
NULL
價值$ Var_IsArray OF =
NULL
COUNT陣KEY ELEMENTS = 2
ARRAY KEY ELEMENTS are NUMERIC
KEY = 0,VALUE = Array
ARRAY KEY EL COUNT對此語句= 2
ARRAY關鍵要素是NUMERIC
KEY = 1,VALUE =陣列

我在這裏搜索到的計算器和發現的類似問題的報告(我甚至試圖測試解決方案,例如這些建議放置在不同的地方返回,在我的測試功能,測試它會工作),但沒有什麼工作,而這個失敗的返回值根據我讀的是PHP返回值,如果expliciting告訴回報是不符合邏輯的。

非常感謝您對這個問題的任何幫助!

[提交原題的後上方]:

我現在想通過創建一個名爲TestReturn.php測試腳本來隔離我的問題。

在該腳本中,我放置了下面的代碼,但仍然沒有返回值!

// DECLARE FUNCTIONS 

     // FUNCTION 
     function Calculation_IsArray ($ArrayAny){ 
      if (is_array($ArrayAny)) { 
       echo '<div>THIS VAR IS AN ARRAY</div>'; 
       $Var_IsArray = TRUE; 
       return $Var_IsArray; 
      } else { 
       echo '<div>THIS VAR IS **NOT** AN ARRAY</div>'; 
      } 
     } 

     // BEGIN MAIN PROGRAM 
     $x = array(1, 2, 3, 4, 5, 6, 7); 
     Calculation_IsArray($x); 

     // COME BACK TO HERE AFTER THE FUNCTION RETURNS CALCULATED VALUE 
     echo '<div>HERE IS THE RETURNED VALUE AND VAR_DUMP BELOW:' . $Var_IsArray . '</div>'; 
     var_dump($Var_IsArray); 

這裏是在HTML輸出到瀏覽器標籤/窗/終端:


THIS VAR是一個數組
這裏是返回值和的var_dump BELOW:
NULL

「船長,這不計算!」,即這對我來說沒有意義,爲什麼PHP沒有返回我的價值,我專門告訴它返回到主程序!

我已經試過編碼,包括所有可能性:

return $variable; 
return ($variable); 
return() ; // i.e. I read somewhere that PHP by default returns the last calculated value in a function. 
return ; 

爲什麼PHP沒有返回自己的價值/可變回主程序?

+0

你爲什麼不中else塊返回false? – SOFe

+1

如果您可以發佈實際嘗試使用返回值的代碼,這將有所幫助。 –

+0

謝謝,朋友們!在我發佈原創帖子之後,我回去做了一些測試,並使用簡化代碼更新了帖子,這些代碼實際上試圖在這裏使用返回值來爲你們複製和粘貼完整的問題代碼。我曾嘗試使用返回false,但默認情況下PHP(我讀)返回false/NULL。 –

回答

0

你可以簡化功能以下,因此始終返回的東西(真,假)

function Calculation_IsArray($ArrayAny){ 
    echo is_array($ArrayAny) ? '<div>THIS VAR IS AN ARRAY</div>' : '<div>THIS VAR IS **NOT** AN ARRAY</div>'; 
    return is_array($ArrayAny); 
} 
+0

如果它是一個數組,我不需要返回。我檢查它是否是一個數組,如果是,那麼我需要計算一些值並將它們作爲數組返回到主程序中,以便在具有特定用途的其他函數中進一步計算。 –

+0

oic - 我應該更詳細地閱讀你的問題 – RamRaider

0
<?php 
// DECLARE FUNCTIONS 

// FUNCTION 
function Calculation_IsArray ($ArrayAny){ 
    if (is_array($ArrayAny)) { 
     echo '<div>THIS VAR IS AN ARRAY</div>'; 
     //$Var_IsArray = TRUE; 
     return true; 
    } else { 
     echo '<div>THIS VAR IS **NOT** AN ARRAY</div>'; 
    } 
} 

// BEGIN MAIN PROGRAM 
$x = array(1, 2, 3, 4, 5, 6, 7); 
$status = Calculation_IsArray($x); 

if($status == true){ 
    // COME BACK TO HERE AFTER THE FUNCTION RETURNS CALCULATED VALUE 
    echo '<div>HERE IS THE RETURNED VALUE AND VAR_DUMP BELOW:<br />' . print_r($x) . '</div>'; 
    var_dump($x); 
} 
+0

問題是我需要在這個函數中做一些額外的計算,並將值返回給主程序以供以後處理。只是返回true而不是數組。我檢查它是否是數組類型,然後做一些額外的計算。這些計算值需要返回。我正在測試返回只有一個變量是簡單的。所以如果我不能返回簡單的單個變量,我不能返回一個更復雜的數組。因此,在我可以繼續之前,我需要解決此返回問題。在Python中,這甚至不會成爲問題... –

+0

您可以在函數Calculation_IsArray()中對您的數組執行所有操作。你想要什麼,並且可以將這些東西返回到原地。 –

+0

您的代碼對我而言產生了以下語法錯誤: 解析錯誤:語法錯誤,意外的$ end在/public_html/testreturn.php上線91 –

0

希望這將幫助:

// FUNCTION 
function Calculation_IsArray ($ArrayAny){ 
    if (is_array($ArrayAny)) { 
     echo '<div>THIS VAR IS AN ARRAY</div>';   
     return true; 
    } else { 
     echo '<div>THIS VAR IS **NOT** AN ARRAY</div>'; 
     return false; 
    } 
} 

$array = array(1, 1, 1); 
if (Calculation_IsArray($array)){ 
    print_r($array); 
}  
+0

不,它不能解決問題,因爲我的程序已經成功迴應HTML。我需要它返回計算出的值/變量,並且能夠從主程序(它們按順序執行程序的所有功能,並只根據需要調用我的代碼)訪問這些值。 –

2

當從返回的東西函數,它不會使變量本身在調用範圍內(即在函數外部)可用。換句話說,$Var_IsArray只存在裏面的的功能。

只返回變量的內容,並且您必須立即在調用函數的位置使用結果;例如存儲它以供將來參考,將其傳遞給另一個函數,或者在條件下進行測試。

例如:

function foo() 
{ 
    $vals = ['red', 'green', 'blue']; 
    return $vals; 
} 

$somedata = foo(); 

在這個例子中,$somedata最終將保持先前存儲在$vals陣列。

這是大多數編程語言中返回語句(或同等功能)的標準行爲。還有其他一些方法可以從函數中獲取變量,例如通過使用全局變量。一般來說,他們不是很好的做法。

我以前也用過Python,我不認爲它有什麼不同(除非我錯過了一種主要的語言功能)。你可能要仔細檢查你的Python代碼是否在做你認爲正在做的事情,否則你將來可能會遇到一些令人討厭的錯誤。

+0

是的,我想我只是想出了自己(並測試了幾次 - 它現在返回變量,感謝上帝!),而你寫這個,並記住,這就是我在Python中做的:我做了一個變量等於函數調用!是的,你是對的兄弟!這是解決方案! 我會發布我的答案編輯原始帖子,讓你們可以看到代碼解決方案 - 感謝我們的創造者誰是知識的增強劑! Honen HaDa'at !! –

0

好的,所以當彼得布魯姆菲爾德迴應並寫出他正確的答案時,我正在竊取我自己並嘗試不同的事情,並記住我在Python中做的事情是使變量等於函數調用!我嘗試過,現在它返回任何我用這個函數做的事情,謝謝上帝!

這裏是主程序更新的代碼現在接收正常返回值(它不再是隻返回NULL):

// BEGIN MAIN PROGRAM 
     $x = array(1, 2, 3, 4, 5, 6, 7); 
     $ResultOfCalculation = Calculation_IsArray($x); 

     // COME BACK TO HERE AFTER THE FUNCTION RETURNS CALCULATED VALUE 
     echo '<div>HERE IS THE RETURNED VALUE AND VAR_DUMP BELOW:' . $ResultOfCalculation . '</div>'; 
     var_dump($ResultOfCalculation);