换句话说,fn()
可以知道它被用作$var = fn();
而不是fn();
?PHP:函数可以知道它是否被赋值为一个值吗?
一个用例是echo
后一种情况下的返回值,而return
它是前者。
这样做可以不传递参数给函数来声明它被使用的方式?
换句话说,fn()
可以知道它被用作$var = fn();
而不是fn();
?PHP:函数可以知道它是否被赋值为一个值吗?
一个用例是echo
后一种情况下的返回值,而return
它是前者。
这样做可以不传递参数给函数来声明它被使用的方式?
许多PHP函数通过传递一个名为$ return的布尔值来实现此目的,如果$ return为true,则返回该值;如果$ return为false,则会输出该值。几个例子是print_r()和highlight_file()。
所以,你的功能应该是这样的:
function fn($return=false) {
if ($return) {
return 'blah';
} else {
echo 'blah';
}
}
任何其他方式不会是良好的编程风格。
不,没有办法找到它。你可以做的独特的事情是抓住调用堆栈(http://it2.php.net/debug_backtrace)并检查它。
得到了一个代码示例? – eyelidlessness 2008-11-02 17:52:54
这是一个非常糟糕的事情要做,除非它是用于调试。 – troelskn 2008-11-02 18:28:46
不,它不能。
它不容易完成,但如果你只是传递一个额外的布尔变量给函数呢?这样,该功能的结束将如下所示:
if (namespace) {
return $output;
} else {
echo $output;
}
似乎是一个非常简单的解决方法。
不,它不应该。这是语言的一个非常基本的前提,即函数不知道使用它们的上下文。这使您可以分解您的应用程序,因为每个部分(功能)都完全与周围环境隔离。
也就是说,你可以对这个特定的用例做些什么,就是关于输出缓冲。默认情况下,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语句。
想想如何解释执行该语句:
$var = fn();
的解释评估操作数从右到左用赋值运算符,所以首先它会评估对右侧的表达式(fn()
在这种情况下),然后将结果分配给$var
。每个表达式都会返回一个值,并且您可以选择如何处理此值。
你知道你是否在矩阵中吗? – adjenks 2017-11-10 20:44:59