PHP有一个像Haskell一样的关注变量吗?

时间:2013-06-18 09:32:00

标签: php variables haskell

Learn You A Haskell上,我读到了:

first :: (a, b, c) -> a  
first (x, _, _) = x  
second :: (a, b, c) -> b  
second (_, y, _) = y  
third :: (a, b, c) -> c  
third (_, _, z) = z  
     

_与列表推导中的含义相同。这意味着我们真的不在乎那部分是什么,所以我们只写一个_

PHP中也有类似的东西吗?如果是这样,它可以用于什么?如果没有,为什么开发人员选择不实施它?

2 个答案:

答案 0 :(得分:1)

不,没有像PHP内置的那样。并没有太多需要类​​似的东西,因为PHP的功能特性现在(随着PHP 5.5的出现)才开始从童年开始成长。目前你没有看到很多接受回调的函数,另外lambda语法有点冗长,所以一个允许你更方便地声明lambdas的功能在有用性梯子上并不是很高。

在Haskell中_是一种简写方式,可以说“这里有一个参数,但我并不关心它”,_的每个外观都被视为不同< / em>彼此出现的参数。

允许您模拟此语法的一个PHP的怪癖是函数可以具有多个具有相同名称的参数:

// compiles with no problem!
function foo($param, $param, $param) {
    echo $param;
}

foo(1, 2, 3); // prints 3

如果你想忽略函数的前两个参数,你可以这样做:

function foo($_, $_, $param) {}

但是,这对编译器来说没有什么特别之处,与使用参数的不同名称没什么不同。它不是惯用的PHP,很可能会使读者对此代码感到困惑。所以,虽然你可以做到,恕我直言,这不是一个好主意。

顺便说一句,在PHP中有一个地方允许您明确声明您不关心信息:list构造。

$a = array(1, 2);
list($x, $y) = $a; // assigns $x = 1 and $y = 2

您可以在list中跳过任意数量的参数,例如:

list(, $y) = $a; // assigns $y = 2, the first element is ignored

答案 1 :(得分:0)

你的意思是函数中的可选参数吗?你可以这样做:

function add($x = 1, $y = 1) {
  return $x + $y;
}

add(4,5); //9
add(3); //4

注意:你不能只提供第二个参数而不是第一个参数,就像这样

add(_,4) //error!

不存在。