2008-11-02 61 views

回答

7

许多PHP函数通过传递一个名为$ return的布尔值来实现此目的,如果$ return为true,则返回该值;如果$ return为false,则会输出该值。几个例子是print_r()highlight_file()

所以,你的功能应该是这样的:

function fn($return=false) { 
    if ($return) { 
     return 'blah'; 
    } else { 
     echo 'blah'; 
    } 
} 

任何其他方式不会是良好的编程风格。

0

不,没有办法找到它。你可以做的独特的事情是抓住调用堆栈(http://it2.php.net/debug_backtrace)并检查它。

+0

得到了一个代码示例? – eyelidlessness 2008-11-02 17:52:54

+0

这是一个非常糟糕的事情要做,除非它是用于调试。 – troelskn 2008-11-02 18:28:46

0

不,它不能。

0

它不容易完成,但如果你只是传递一个额外的布尔变量给函数呢?这样,该功能的结束将如下所示:

if (namespace) { 
    return $output; 
} else { 
    echo $output; 
} 

似乎是一个非常简单的解决方法。

3

不,它不应该。这是语言的一个非常基本的前提,即函数不知道使用它们的上下文。这使您可以分解您的应用程序,因为每个部分(功能)都完全与周围环境隔离。

也就是说,你可以对这个特定的用例做些什么,就是关于输出缓冲。默认情况下,echo会将数据发送到标准输出,但是您可以设置一个缓冲区,它会将输出捕获到一个变量中。例如:

function foo() { 
    echo "Hello World"; 
} 
foo(); // will output "Hello World" 
ob_start(); 
foo(); 
$foo = ob_get_clean(); // will assign the string "Hello World" into the variable $foo 

除此之外,通常认为它是直接输出函数的错误风格。您通常应该返回一个字符串,并将其保留为脚本的顶层输出。理想情况下,整个应用程序中应该只有一个单一的echo语句。

2

想想如何解释执行该语句:

$var = fn(); 

的解释评估操作数从右到左用赋值运算符,所以首先它会评估对右侧的表达式(fn()在这种情况下),然后将结果分配给$var。每个表达式都会返回一个值,并且您可以选择如何处理此值。

相关问题