函数中PHP数组foreach范围的说明

我有以下PHP代码

$car1 = new Car('Ford','Fusion');
$car2 = new Car('Chevy', 'Avalanche');
$car3 = new Car('Ford', 'F150');

$cars = array($car1, $car2, $car3);

function getCarsByMake($carMake){
    foreach($cars as $car){
        if($car->make == $carMake){
            echo 'Car: ' . $car->make . ' ' . $car->model . "<br>";
        }
    }
}

getCarsByMake('Ford');

我得到的错误是foreach语句中的$cars未定义.但是,据我所知,$cars数组应该是全球范围的吗?如果我通过构造函数将数组传递给函数,它可以正常工作.但我想知道为什么我不能以这种方式访问​​数组.

解决方法:

你有两个选择.

>添加全局关键字

function getCarsByMake($carMake){
   global $cars;
   foreach($cars as $car){
       if($car->make == $carMake){
           echo 'Car: ' . $car->make . ' ' . $car->model . "<br>";
       }
   }
}

>使用$GLOBALS阵列:

function getCarsByMake($carMake){
    foreach($GLOBALS["cars"] as $car){
        if($car->make == $carMake){
            echo 'Car: ' . $car->make . ' ' . $car->model . "<br>";
        }
    }
}

虽然我仍然建议将它作为一个显式参数传递,因为它使代码更易读和可维护,恕我直言.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...