第八节 PHP函数

PHP零基础入门

PHP函数:可以重复使用的代码,你可以想象一次使用不止一次,你不需要手动编写所有的编码很多次,你可以将该代码封装为你引用的函数,这样你需要更改这些代码的内部工作,而不必在项目中的多个位置进行更改,只需在函数中更改一次,首先写function这个关键词,然后这就是你将如何引用该函数或者你将如何调用该函数。

PHP函数-基础语法介绍

我们创建了一个叫做hello的函数,所以这将是函数的标识符(),这个收回的括号,期望这个函数提供从外部提供一些值,这个函数可以动态返回根据你传递给它的值返回不同的数据。{}执行代码写在里面,一般来说,将要返回一个值,这就是你要返回你想要的值。

这个函数返回值是你好!

执行不会显示东西,因为我们刚刚创建了这个函数,但是我们没有触发它。

现在我们要触发这个函数say_hello

Say_hello();

执行还是不显示任何东西

因为这个函数没有任何东西,他只是return,我们可以echo,这是不好的操作的,除非你有特殊的理由

例如,2.19

但是一般来说,使您的函数简短,并且一个函数负责的一个想法。

如果你有一个函数,50多行长,这很有可能就是我们称之为”代码异味“,这意味着有一些你的代码可能导致深层次问题。因为这个函数中有50行,这可能不能重复使用。

所以要尽量保持你的函数简短,扼要,完成一两件事。

返回刚才说的值,准备输出从say_hello返回的结果
我们知道,我们叫say_hello
这是返回的,所以我们基本上是在这里回答“你好”。

另一个方法就是将返回的值存储在变量中$greeting
现在我们输出greeting
我们将得到完全相同的事情

如果我们想对一个人问好怎么办?

当我们调用这个函数,我要传一个名,叫“林大”的值。
$greeting = say_hello(‘林大’);

现在正在传递这个值,需要在我们的函数中被接收
所以现在say_hello需要接受一个值,所以我们称它为name。

Function say_hello($name){
Return “你好!”
}

你要分配这个变量名,
我们将使用插值的方法把$name插入“你好! $name”

Function say_hello(){
Return “你好! $name.”;
}

这种情况,我们不需要变量,我们直接使用
Echo say_hello(‘林大’);
所以取决于我们传什么,我们将得到不同的回应。

如果我们删除括号里面的值(‘林大’);
我们尝试在不传递值的情况下调用say_hello
返回错误,说missing argument 1
这个函数期望有一些东西,当你调用它,你没有提交一个值的时候,它肯定会说,我想要的一些东西,你没有把它交给我,我要这个值。
那么你可以提供默认值。

你想说,好的,如果这个被调用的函数没有任何参数,那么我们将假设一个值,这是非常有帮助的。

所以我们将这个默认值设置为’朋友’。
所以现在我们接受了name,但是我们正在设置默认值’朋友’。
所以当我们调用这个的时候,我运行它,我们会得到“你好!朋友”。
但是这是非常妙的,你可以传任何值覆盖buddy。

Echo say_hello(‘林先生’);

朋友是默认值,但只要传“林先生”值,现在name是“林先生”。

在这样的条件下,当你想提供一个值,但是你也想设置一个默认值,你就可以这样做。

实用例子

当我们有一个数组,现在我们来创建一个。
联合数组

$arr = array(‘name’ => ‘林大’, ‘age’ =>32,’occupation’=>’总经理’);

我们要在屏幕上显示

Print_r($arr);

sublime下面展示的很整齐
浏览器看就要通过浏览源码

如果没有浏览源码的功能,可以这样改进:
echo ‘

';
Print_r($arr);
 echo '

‘;

所以我们可以解决这个问题的方式是将其抽象为可重复使用的代码或函数。

让我们在我们的源码顶部尝试这个方法

创建个functions.php

那么当你需要使用这些函数时,你将需要把functions.php引入
Require ‘function.php’
现在,您可以访问所有这些函数
这次,为了方便起见,我们将把它全部放在同一页上

我将调用函数叫pp,pp是pretty print简写
Function pp(){
echo ‘

';
	print_r($arr);
	echo '

‘;
}

所以现在这里的情况,当我可以输出信息的时候就可以了。
因为它是一个辅助函数,它意味着不用于产品模式,
辅助函数只是为了开发,当我需要的时候能够很快在页面上输出我需要的东西。
然后我可以删除该功能。

在这个例子,这是非常适合输出它。
当我们调用pp时,它需要接受一个数组或值。
我称它为$value,因为我不知道我们将要提供什么
有可能是对象,有可能是数组
现在我们输出一个pre标签,然后我们将要输出这个值,然后关闭pre标签

Function pp($value){
echo ‘

';
	print_r($value);
	echo '

‘;
}

这个就是我们第一个可重复使用的函数

对比之前的
echo ‘

';
print_r($arr);
echo '

‘;

改为
Pp($arr);

下一个例子【继续】

创建我们自己的函数,array pluck(提取数组信息)
我将创建一个变量叫people并等于一个数组
这个数组中,我们将提供每个人的信息,名字,年龄等等
$people = array(
array(‘name’ => ‘林大’,’age’=>30,’occupation’=>’web开发工程师’)
);

复制创建更多的个人信息
$people = array(
array(‘name’ => ‘林大’,’age’=>30,’occupation’=>’web开发工程师’);
array(‘name’ => ‘林二’,’age’=>50,’occupation’=>’CEO’)
array(‘name’ => ‘林三’,’age’=>60,’occupation’=>’BOSS’)
);

现在我们创建一个特使函数(array_pluck)允许我们提取这个数组中的单元信息
能够调用这个自定义函数,能够调用数组值

要提取这个数组中的name的值,通过$people 数组,返回一个新的数组,包含与键名name相关的值。

array_pluck(‘name’,$people);//array(‘林大’,’林二’,’林三’)

我们在创建函数之前,想想如何与这个函数交互,然后在写逻辑代码。
理想状态,如果我们运行array_pluck
我想要它($people)通过这个数组,我希望它($people)返回一个新的数组
这个新数组包含的值与name键名关联。
在理想状态下,我想要返回的是’林大’,’林二’,’林三’的一个数组,
我们提取该数组name键名中的值,如果取键名age,那么返回的是”30″,”50″,”60″

现在我们知道要这个函数怎么做,让我们开始部署这个函数(写在文件开始)

第一种方法:
首先这个array_pluck函数需要接受toPluck单元($toPluck),然后需要接受数组($arr).
function array_pluck($toPluck, $arr){
这个函数要做的第一件事是我想要这个函数返回这个包含值的新数组
创建新数组习惯的叫法是$newarr或者$ret(代表返回return的意思)
这里就用$ret
设置数组要注意
$ret = [];php5.4以上可以这样写
$ret = array();5.3版本以前这样写

我们将这个函数返回这个包含值的新数组设置为一个数组,
我们将填充返回的数组,然后这将被返回
用老方法
$ret = array();

现在创建这个新数组,要过滤已有的数组,已有数组实际将是三个单元,每一个单元将是数组的本身
每个数组($arr)作为单元($item)
单元将在第一次迭代时等于array(‘name’ => ‘林大’,’age’=>30,’occupation’=>’web开发工程师’);
接着单元将等于array(‘name’ => ‘林二’,’age’=>50,’occupation’=>’CEO’),
最终单元将等于array(‘name’ => ‘林三’,’age’=>60,’occupation’=>’BOSS’)。

单元被遍历

foreach($arr as $item){

我们需要做的是拿这个返回数组($ret),我们需要给它填充值
这个例子是键名$name

$ret []= $item[‘name’];

如果我们硬插入,我们想做就是,name单元 $item[‘name’];

}

输出$ret,运行
Print_r($ret);

输出来仅仅是name的值,如果我们改变键名运行它,返回名称

值他们想要提取是被包含在toPluck变量中,我们想修改,我们不想硬输入,我们替换成变量$toPluck

$ret []= $item[‘$toPluck’];

运行它,输出的是姓名,因为我们array_pluck(‘name’,$people);是姓名。

}

最后一步就是我们把print_r($ret);改为return $ret;
我们把array_pluck(‘name’,$people);存到变量中叫$plucked
$plucked = array_pluck(‘name’,$people);

print_r($plucked);

用array_map另外的方法

定义:array_map-为数组的每个元素应用回调函数

Array_map是php内置功能,没有学习过

array_map函数接受一对参数
第一个参数将是要执行的函数,
第二个参数是你正在使用的数组,叫$arr
Function array_pluck($toPluck,$arr){

当我们调用array_pluck函数时,它会调用这个array_map,
这将要执行此函数中$arr的每个单元($item)
array_map需要接受$item的值
return array_map(function($item){
Print_r($item);注释解释进入下面
//所以这里与数组映射的区别我们将返回将被分配的值
现在在这种情况下与array_map无论我们返回将被分配
例如:
Return ‘林大’;
输出返回是林大林大林大

},$arr);

所以无论我们返回什么,它更容易创建一个名为ret的变量
$ret = array_map(function($item){
Return ‘林大’;//注释看下面代码

//对于每一个我们在函数中编写一些代码来指定返回的代码
例如
$item[‘name’]=’修改’;
Return $item;

//name的值被更新了
//所以array_map只是得到一个函数,我们可以每次执行这个函数,这使我们能够操纵数组。

我们例子
所有我们想做的,我们只是想提取值
所以像以前一样将单元返回给Pluck,将会出现错误。
Return $item[$toPluck];

这就是第一次介绍变量的作用域,
注意我们正在尝试使用$toPluck变量,
这就是错误所在,而且它在说我不知道什么是toPluck
如果我尝试输出pluck,然后我要运行这个模块
Echo $toPluck;die();

如果你只想看值,不想做其它任何事情,就用die()停止执行下去
现在如果我运行它,我们仍然会得到未定义的变量toPluck

我们知道我们在function array_pluck有toPluck,回到
Function array_pluck($toPluck,$arr){
输入echo $toPluck;
注释Echo $toPluck;die();
我们看到toPluck的单元是occupation

为什么在function array_pluck输出$topluck是对的
而Return $item[$toPluck];和Echo $toPluck;die();不知道$topluck

这就是变量和作用域(局部范围)的区别

专门有一节课研究作用域

函数里面可以嵌套匿名函数
每一个函数有自己的局部作用范围

在这个例子,这个toPluck变量,在本地范围内可用

但现在,当我们尝试在这个匿名函数($ret = array_map(function($item)中使用它,这个(Echo $toPluck;die();)匿名函数有它自己的本地作用范围

所以当你在这里引用toPluck时,PHP会假设你引用一个局部变量
$toPluck

局部变量就是在此函数范围内,但是这个变量不存在,我们没有创建它

它没有离开它的范围,并向上移动,寻找另一个与该名称的变量。
它只是指该变量的本地版本。

你可以创建全局变量,在PHP 5.3中就开始使用新的东西,
这实际上是PHP另一个可怕的单词,实现闭包的方法
我们准备使用ToPluck,
$ret = array_map(function($item) use($toPluck){
我们调用这个匿名函数
我们知道它有自己的局部作用范围,我只是想做的是:
我想让你调用这个( array_map(function($item) use($toPluck))函数,
我想给你这个use($toPluck)变量
我希望你在你的函数中使用这个变量
所以我们把它交给$toPluck
现在,在这个匿名函数中,它确实可以访问toPluck,因为我们给它use($toPluck)

现在我们恢复
Return $item[$toPluck];

},$arr);

这次分配array_map的结果我并不真的需要这样做,因为通知我们把它分配给一个变量,我们直接改为

Return $ret;

我们可以重构代码

Function array_pluck($toPluck,$arr){
Return array_map(function($item) use($toPluck){
Return $item[$toPluck];
},$arr);
}

我想要提取这个名字,我们将把它存储在名为names的变量中

$names = array_pluck(‘name’,$people);

Foreach($names as $name){//循环name
Echo $name;
}

我们创建两个function

Helper function 叫pp

两种自定义函数的方法array_pluck

函数是可以重复使用的代码

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

Last modified: 2019年3月17日

Previous Story

PHP零基础入门

PHP基础:php格式化字符串

php格式化字符串:学习使用不同的输出方法和储存字符串的变量,printf函数,sprintf函数,sprintf和printf的区别.

...

Next Story

PHP零基础入门

PHP基础:简单操作php对象

对象实际上是有点混乱的东西,我们已经知道创建一个关联数组包含相关信息,他们可以是一个单元,和对象。 例如: $ …

...