代码之家  ›  专栏  ›  技术社区  ›  eyelidlessness

PHP:函数能知道它是否被赋值吗?

  •  4
  • eyelidlessness  · 技术社区  · 17 年前

    换句话说,可以 fn() 知道它被用作 $var = fn(); 而不是as fn(); ?

    一个用例是 echo 在后一种情况下,返回值为 return 它在前者。

    这可以在不向函数传递参数以声明其使用方式的情况下完成吗?

    6 回复  |  直到 17 年前
        1
  •  7
  •   Paige Ruten    17 年前

    许多PHP函数通过传递一个名为$return的布尔值来实现这一点,如果$return为true,则返回该值,如果$return为false,则打印该值。举几个例子 print_r() highlight_file() .

    所以你的函数看起来像这样:

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

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

        2
  •  3
  •   troelskn    17 年前

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

    也就是说,对于这个特定的用例,你可以做的就是打开输出缓冲 echo 将向stdout发送数据,但您可以设置一个缓冲区,它将把输出捕获到一个变量中。例如:

    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语句。

        3
  •  2
  •   Paige Ruten    17 年前

    想想解释器是如何执行这条语句的:

    $var = fn();
    

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

        4
  •  0
  •   andy.gurin    17 年前

    不,没有办法找到它。你能做的唯一的事情就是获取调用堆栈( http://it2.php.net/debug_backtrace )并对其进行检查。

        5
  •  0
  •   Konrad Rudolph    17 年前

    不,它不能。

        6
  •  0
  •   Stephen Walcher    17 年前

    这不容易做到,但是,如果你只是向函数传递了一个额外的布尔变量呢?这样,函数的结尾看起来像:

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

    推荐文章