'function'和'use'以及'array_filter'如何在PHP中运行?

时间:2013-08-12 08:57:22

标签: php function array-filter

我熟悉在.php文件顶部创建一个PHP函数,例如:

function my_little_function($parm1,$parm2) {
   if ($parms < $parm2) {
   return "yes";
   } else {
   return "no";
   }
}

然后这样称呼:

$result = my_little_function("1","2");
echo "The answer is $result." . "\n";

我有一些代码,我没有编写代码,它在上面的my_little_function函数的传统使用中使用了“function”和“use”。

我对此感到困惑,并为您更有经验的PHP开发人员提出一些问题。以下是我所指的工作PHP代码的一部分:

$neededObject = array_filter($st_ny_trip->STOPS->STOP,function($e) use ($final_desired_dest,$connect_raw){return $e->NAME == $final_desired_dest && DateTime::createFromFormat("m/d/Y g:i:s a", $e->TIME) > $connect_raw;});

$e未在函数的任何部分或程序的其余部分中设置,那么使用$e的是什么?它是如何传递一个值的,它是如何被使用的?似乎没有这个功能的名称,所以我不知道它是如何被调用的,这是怎么做的?

这是否正在创建一个即时使用的函数,并且每次调用此代码时都会重新生成它?如果它是一个函数,为什么不在这个函数之外创建它并调用它?

我自己也没有使用'使用',所以这对我来说并不熟悉。我在php.net上查了一下,它看起来像是一种为某些东西分配值的方法,但是我找不到任何实际的例子来证明它为什么需要它以及什么时候应该使用它。

我查了array_filter,它说它是“使用回调函数过滤数组的元素”。我不知道回叫功能是什么。它是指function($e)吗?

$neededObject的上述PHP代码行应该采用不同的格式,以便更容易阅读吗?

2 个答案:

答案 0 :(得分:6)

让我们用array_map()来解释发生了什么。

我们希望复制数组的输入:因此,如果输入为aa,则输出为aaaa

通常的方法是创建一个函数,然后将其传递给array_map()

$array = range('a', 'e');

$new_array = array_map('duplicate', $array);
print_r($new_array);

function duplicate($string){
    return $string.$string;
}

Online demo

但是如果你只想使用这个功能怎么办?由于 PHP 5.3 ,有一些名为anonymous functions的东西,我们使用它如下:

$array = range('a', 'e');

$new_array = array_map(function($string){
    return $string.$string;
}, $array);
print_r($new_array);

Online demo

现在,让我们假设您想要从另一个变量添加标准值。全局变量很容易。但正如我们所知,全球变量是邪恶的,应该避免。我们可以使用use()

$array = range('a', 'e');
$standard_value = ',';

$new_array = array_map(function($string)use($standard_value){
        // $standard_value becomes available inside the function
    return $string.$standard_value.$string;
}, $array);
print_r($new_array);

Online demo

如果我们在循环时使用引用写入外部变量,

use()也会变得有用:

$array = range('a', 'e');
$another_string = '';

$new_array = array_map(function($string)use(&$another_string){// note &
    $another_string .= $string.$string; // overwrite $another_string
    return $string.$string;
}, $array);
print_r($new_array);
echo PHP_EOL . $another_string;

Online demo

答案 1 :(得分:2)

$e变量充当普通函数参数,因此将由调用该函数的代码传递,请参阅使用$earray_filter的值的文档。< / p>

use语句将变量从本地范围导入anonymous' function的范围。

$myvar = 'world';
$myFunc = function ($test) use ($myvar) {
    return $test . ' ' . $myvar;
};
echo $myFunc('hello'); // echoes 'hello world';

如果您未包含use ($myvar)部分,则isset($myvar)将从内部匿名函数返回false,因为它具有单独的范围。