在PHP中正确理解范围(与Javascript相比)



我知道这个作用域在PHP和Javascript中的工作方式不同。

当我第一次开始学习Javascript时(在学习PHP几年之后),我最初并没有意识到在函数外部声明的变量也可以从函数内部访问。

现在(在专注于Javascript的几年之后),我对如何将PHP函数范围变量返回到函数外环境感到困惑。

例:

$myArray = array();
function addItemsToMyArray($myArray) {
    $myArray[] = 'apple';
    $myArray[] = 'banana';
    $myArray[] = 'coconut';
    return $myArray;
}  
addItemsToMyArray($myArray);
echo count($myArray);    /* Gives 0 */

为什么count($myArray)0而不是3

函数 addItemsToMyArray() 已正确设置为将数组返回到主 PHP 代码,但您忘记捕获该返回值并将其放入变量中。编写此代码并使差异更容易看到的一种方法是这样的:

function addItemsToMyArray($tmpArray) {
    $tmpArray[] = 'apple';
    $tmpArray[] = 'banana';
    $tmpArray[] = 'coconut';
    return $tmpArray;
}  
$myArray = array();
$myArray = addItemsToMyArray($myArray);
echo count($myArray);    /* Gives 3 */
函数

内部使用的变量与函数外部的$myArray变量不同。

除非另有指定,否则函数/方法参数是按值传递的,这意味着您可以在函数中获取它们的副本。如果希望函数更改传递给它的变量,则需要按引用传递。如下所述:

默认情况下,函数参数按值传递(因此,如果函数中参数的值被更改,它不会得到在函数外部更改)。允许函数修改其参数,它们必须通过引用传递。

若要始终通过引用传递函数的参数,请在前面加上前缀函数定义中参数名称的与号 (&):

请注意文档页面中$array前的 & 符号,用于对 asort()ksort() 等函数进行排序:

布尔排序 ( 数组 &$array [, int $sort_flags = SORT_REGULAR ] )

布尔 ksort ( 数组 &$array [, int $sort_flags = SORT_REGULAR ] )

相关内容

  • 没有找到相关文章

最新更新