第九节:PHP局部变量和全局变量的作用范围

PHP零基础入门

PHP变量:局部变量和全局变量的作用范围以及在函数中应该,由于形参相当于函数中定义的变量,所以形参也是一种局部变量,正因为全局变量在任何函数中都可以访问,所以在程序运行过程中全局变量被读写的顺序从源代码中是看不出来的,源代码的书写顺序并不能反映函数的调用顺序。

PHP变量-局部变量和全局变量的作用范围

把上节课的代码复制到2.7_local_and_global_variables文件,文件命名修改为scope.php。

上节课学习了function,我们也写了函数sum(),

function sum($a, $b){
$result = $a + $b;

return $result;
}

$result = sum(1, 2);

看这个程式,在{}的代码,我们叫局部变量,scope就是变量的可见性,$result在sum()函数的范围就是局部变量,这个变量在外面是看不到的。在函数外面的变量就是全局变量,全局可见。

编写变量:$greeting = ‘Hello, world.’;在sum()里面,我们输出$greeting:

function sum($a, $b){
echo $greeting;
$result = $a + $b;

return $result;
}

报错:
Notice: Undefined variable: greeting in D:\xampp\htdocs\PHPFundamentals2019\2.7_local_and_global_variables\scope.php on line 9

Warning
: Missing argument 1 for output(), called in D:\xampp\htdocs\PHPFundamentals2019\2.7_local_and_global_variables\scope.php on line 57 and defined in
D:\xampp\htdocs\PHPFundamentals2019\2.7_local_and_global_variables\scope.php
on line
17

Notice: Undefined variable: value in D:\xampp\htdocs\PHPFundamentals2019\2.7_local_and_global_variables\scope.php on line 19

这里的output()没有传值,所有得到 Missing argument 1 for output()警告,回到我们output函数,我们传递$value到output($value),我们可以这样修复:

function output($value = ”){
echo ‘

';
print_r($value);
echo '

';
}

解释程式:
1、$value变量等于一个空值;
2、报错没有了;

$greeting变量是全局,在sum()中应该能够看的到,但是默认的情况下是不行的,在sum()函数:

function sum($a, $b){
global $greeting;
echo $greeting;
$result = $a + $b;

return $result;
}

程式解释:
1、全部变量在函数里面使用的时候要加global关键词;
2、global关键词可以添加多个变量:global $greeting, $global_variable_two;

学习PHP自带函数

1、array_column
我们首先写$province变量存在省份和省市关联数组:
$province = [
['name' => '四川省', 'city'=>'成都市'],
['name' => '广东省', 'city'=>'广州市'],
['name' => '吉林省', 'city'=>'长春市'],
['name' => '陕西省', 'city'=>'西安市'] ];

$province_name = array_column($province, 'name')

标准语法:
array_column ( array $input , mixed $column_key [, mixed $index_key = null ] )

程式解释:
1、array_column — 返回数组中指定的一列
2、array_column() 返回input数组中键值为column_key的列
1、$province_name等于array_column()传递一个要使用的$province;
2、再传递这个建name的名,province数组中有名称key;
3、并给我们提供name数组,返回数组中对应值的键。
3、input:需要取出数组列的多维数组。
4、column_key:需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键,也可以是属性名。
5、index_key:作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。

输出:output($province_name);

Array
(
[0] => 四川省
[1] => 广东省
[2] => 吉林省
[3] => 陕西省
)

我们得到各个省份的名称,我演示这个只是为了更好的理解多维数组的概念,当然PHP已经内置有这个功能了。

创建一个pluck变量

如果你写代码,你想要写成什么样?例如:$province_name = pluck($province,'name');我们要用pluck函数传值,传递$province数组的健名name。

所以我们需要Pluck函数:

Function pluck($array,$key){
//循环遍历这个数组foreach,也有很多人使用数组自带的类似的循环函数,下面就用array_map
$results = array_map($array);
return $result;
}

接下来,我们需要些一个函数,这个函数就是告诉什么是我们array_map函数,为了让array_map函数与return_name函数工作,我们需要传递$item,如果我们使用$province的数组,就把$province的数组项目传递到return_name,我们要返回的项目的值这个$province的name:

function return_name($item){
return $item['name'];
}

回到array_map函数,让我们告诉我们的函数的名字是什么:

function pluck($array,$key){
$results = array_map("return_name",$array);
return $result;
}

将会找return_name函数,然后在执行。

当我们$province_name = pluck($province,'name');把name改为city,我们也要把return_name函数$item传值的name修改city,但是这不是我们pluck函数所想要的,我们需要输入什么就给我们返回什么值,不需要再修改其它的函数值。

使用匿名函数

匿名函数就是函数没有名称:

function pluck($array,$key){
$result = array_map(function($item){
return $item[$key];
},$array);
return $result;
}

得到Notice错误,因为我们使用的$key变量,不是匿名函数的局部变量,这个$key变量是一个全局变量,我们不能够用全局变量在匿名函数里面做同样的处理,我们把key定义为global:

global $key;

错误少点了,但是我们没有一个全局变量叫$key,我们可以使用use语句:

function pluck($array,$key){
$result = array_map(function ($item) use ($key){
return $item[$key];
},$array);
return $result;
}

简单得说,我们这个匿名函数需要使用这个变量。

刷新正式我们想要的。

全局变量
同级变量:当变量不是全局,但是我们需要使用,就用use语句。
局部变量

接近10年的互联网从业经验,精通Scrum敏捷软件开发的方法,从事互联网产品设计,开发,测试,运营,案例不少于20个,发现自己最喜欢的工作是做外贸营销,外贸SEO,特别喜欢谷歌优化。从2017年3月开始坚持在群161510483直播谷歌SEO和WEB前端开发技术,只要加进来坚持学习零基础也能够学会。

Last modified: 2019年3月17日

Previous Story

PHP零基础入门

第五节 PHP条件语句和做决定

PHP条件语句:编写代码时,我们经常会希望为不同的决定执行不同的动作,如果你需要用条件做决定,在开始学习这节课之前,首先把我们的代码组织一下.

...

Next Story

PHP零基础入门

第十一节 GET请求

GET请求:在浏览器输入地址就在使用get请求也就是请求检索信息,我只想要Web服务器的信息,我们点击网页的导航发出其它GET请求.

...