2013-06-22 54 views
4
function a(){ 
    b(1); // Returns true 
    b(0); // Echoes "Just some output" 
} 

function b($i_feel_like_it){ 
    if($i_feel_like_it){ 
     return return true; 
    }else{ 
     echo "Just some output"; 
    } 
} 

是否有可能從一個不同的函數內調用「返回」功能?php叫從不同的功能「返回」

這樣做的目的是我有一個有很多功能的類..而不是寫一堆代碼來確定它們是否應該返回一些值,我想簡單地把一個函數,如「驗證()」和有必要時調用返回函數,否則繼續使用該函數。

只是想知道是否有可能做到這一點。

+0

如果你想調用函數的流量控制影響調用它們的函數,這是例外的用例。我添加了一個使用異常驗證的例子,看看是否有幫助。 – elias

+0

我有大約40個函數返回一些值..我有另一個功能,可以「覆蓋」這些值。當這些函數被調用時,我想要一個簡單的「check_overwritten_value()」來返回覆蓋的值,或者直接繼續,如果沒有找到。我知道如何使它與2行代碼一起工作,我只是不想爲40個函數重複相同的代碼,全部都是 – user2103849

+0

是的,但是,您知道,這真是一個設計問題,而不是語言問題。沒事先知道你想做什麼是正確的,然後你做一些功能並給他們打電話。但是現在你已經知道你想要什麼了,這與你的創作方式有點不同,我認爲你應該改變它的時候,IMO - 而不是尋找另一種捷徑。 – elias

回答

1

你正在嘗試的是不可能的。檢查手冊return

+0

如果b(1)可以返回「返回true」,並使函數a()調用「返回true」,那就是如何。我只是想知道是否有可能,但顯然不是。 – user2103849

+0

我知道如何回報的作品,我只是想知道是否有什麼可以完成它 – user2103849

+0

我看到這個例子不是很好。這是因爲你正在嘗試的是不可能的 – hek2mgl

2

不,它不是。你必須檢查b()返回的是什麼,如果它是真的,則從()返回。

function a() { 
    if (b(1) === true) 
     return true; // Makes a() return true 
    if (b(0) === true) 
     return true; // Makes a() echo "Just some output" 
} 

function b($i_feel_like_it) { 
    if ($i_feel_like_it){ 
     return true; 
    } else { 
     echo "Just some output"; 
    } 
} 
+0

我知道如何使它工作..我只是不想爲40個函數編寫重複的代碼..即使它只是幾行,我想知道是否有可能 – user2103849

+0

我完全同意。雖然不可能。 – SpenserJ

3

總之,NO。 感謝天哪,這會讓它成爲一種非常奇怪的語言,你可能不會依賴任何函數的返回。

雖然可以引發例外check out the manual。這樣,你可以讓被調用的方法影響被調用者的流量控制 - 儘管如此,儘量不要過度使用它們,因爲這些代碼可能會變得非常難看。

下面是關於如何使用異常進行驗證的例子:

class ValidationException extends Exception { } 

function checkNotEmpty($input) { 
    if (empty($input)){ 
     throw new ValidationException('Input is empty'); 
    } 
    return $input; 
} 

function checkNumeric($input) { 
    if (!is_numeric($input)) { 
     throw new ValidationException('Input is not numeric'); 
    } 
    return $input; 
} 

function doStuff() { 
    try { 
     checkNotEmpty($someInput); 
     checkNumeric($otherInput); 
     // do stuff with $someInput and $otherInput 
    } catch (ValidationException $e) { 
     // deal with validation error here 
     echo "Validation error: " . $e->getMessage() . "\n"; 
    } 
} 
0

模板差距。

function a() 
{ 
b(); 
return $a; 
} 
function b() 
{ 
c(); 
return $b; 
} 

麻煩的是在你的心中......

+1

這沒有任何意義,除了一些未定義的變量警告外,這裏應該發生什麼?假設你已經定義了'c()'... – jeroen

+0

我的意思是這個問題是關於某種遞歸... –

0

如果你想a()返回從b(1)的真真的,那麼你可以使用return a();