php 赋予我的函数访问外部变量的权限

wfypjpf4  于 2022-12-17  发布在  PHP
关注(0)|答案(6)|浏览(111)

我在外面有一个数组:

$myArr = array();

我想给予我的函数访问它外部的数组,这样它就可以向数组中添加值

function someFuntion(){
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;
}

我如何给予函数一个正确的变量作用域?

w80xi6nr

w80xi6nr1#

默认情况下,当您在函数内部时,您无权访问外部变量。
如果你想让你的函数访问一个外部变量,你必须在函数内部声明它为global

function someFuntion(){
    global $myArr;
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;
}

有关详细信息,请参见Variable scope
但请注意,使用全局变量并不是一个好的做法:有了它,你的函数就不再是独立的了。
更好的方法是让你的函数返回结果

function someFuntion(){
    $myArr = array();       // At first, you have an empty array
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;      // Put that $myVal into the array
    return $myArr;
}

并像这样调用函数:

$result = someFunction();

你的函数也可以带参数,甚至可以处理通过引用传递的参数

function someFuntion(array & $myArr){
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;      // Put that $myVal into the array
}

然后,像这样调用函数:

$myArr = array( ... );
someFunction($myArr);  // The function will receive $myArr, and modify it

用这个:

  • 您的函数将外部数组作为参数接收
  • 并且可以修改它,因为它是通过引用传递的。
  • 这比使用全局变量更好:你的函数是一个单元,独立于任何外部代码。

要了解更多信息,请阅读PHP手册的Functions部分,尤其是以下小节:

vmdwslir

vmdwslir2#

您可以使用anonymous function

$foo = 42;
$bar = function($x = 0) use ($foo) {
    return $x + $foo;
};
var_dump($bar(10)); // int(52)

或者,您可以使用arrow function

$bar = fn($x = 0) => $x + $foo;
f3temu5u

f3temu5u3#

Global $myArr;
$myArr = array();

function someFuntion(){
    global $myArr;

    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;
}

事先警告一下,一般来说人们会远离全球股票,因为它有一些缺点。
你可以试试这个

function someFuntion($myArr){
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;
    return $myArr;
}
$myArr = someFunction($myArr);

这样你就不用再依赖全局了。

xmakbtuz

xmakbtuz4#

$myArr = array();

function someFuntion(array $myArr) {
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;

    return $myArr;
}

$myArr = someFunction($myArr);
eh57zj3b

eh57zj3b5#

实现目标的一个可能不是很好的方法是使用全局变量。
你可以通过在函数的开头添加global $myArr;来实现这一点,但是请注意,使用全局变量在大多数情况下是一个坏主意,也许可以避免。
更好的方法是将数组作为参数传递给函数:

function someFuntion($arr){
    $myVal = //some processing here to determine value of $myVal
    $arr[] = $myVal;
    return $arr;
}

$myArr = someFunction($myArr);
tv6aics1

tv6aics16#

“* 这真的是关于事物的正确顺序**

<?php

/*In general(the rule can be broken) code is interpreted left to right
top to bottom.

If you want a function to be able to use the values you input,
write the function first. This means the function should be above where
it is requested in the code. Add some parameters($param). Note it does
not need to be called $param, I use $value in the example. This can be
multiple $vars going from left to right i.e($param_1,$param_2), or be an
array(), or a mix. Just remember left to right. Left values must exist
before right values.*/

//Example function here
function foo($value){
    
    return $value[0] + 1;

}

//Optional way to create array
//$value[0] = 0;

$value = array(0);
$limit = 10;

while($value[0] < $limit){
    
    //Request the function here as many times as you want
    echo $value[0] = foo($value);
    echo "<br>";
    
}

//Clean up afterwards
unset($value,$limit);

?>

相关问题