2013-06-22 55 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();