Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >php面试常问方法汇总

php面试常问方法汇总

作者头像
码农编程进阶笔记
发布于 2021-07-20 08:12:37
发布于 2021-07-20 08:12:37
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

global定义的全局常量和$GLOBALS的区别

$GLOBALS(超全局变量) — 引用全局作用域中可用的全部变量, 一个包含了全部变量的全局组合数组。变量的名字就是数组的键

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
function test() {
 $foo = "local variable";
echo 'GLOBALS: ' . $GLOBALS["foo"] . "\n";
echo '$foo in current scope: ' . $foo . "\n";
}
$foo = "Example content";
test();
?>
//结果
GLOBALS:Example content
$foo in current scope:local variable

global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件

使用关键字“global”你就可以把全局数据导入到一个函数的局部范围内

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
$a = 1;
$b = 2;
function Sum()
{
    global $a, $b; //如果没有全局变量global在方法内是不能获得$a,$b值的
    $b = $a + $b;
}
Sum();
echo $b;
?>
//结果
3

在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
global $a;
$a=123; //必须分开赋值
function f() {
echo $a; //错误
}

//再看看下面一例
function f() {
 global $a;
 $a=123;
}
f();
echo $a; //正确,可以使用

const 定义的常量和define()定义的常量的区别

1.const用于类成员变量的定义,一经定义,不可修改。define不可以用于类成员变量的定义,可用于全局常量。

2.const可在类中使用,define不能(一般是define在类外定义常量,const在类内定义常量)

3.const不能再条件语句中定义常量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
if (...){const FOO = 'BAR';    // 无效的invalid
}if (...) {
define('FOO', 'BAR'); // 有效的valid
}
?>

4.const采用普通的常量名称,define可以采用表达式作为名称

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
const  FOO = 'BAR';
for ($i = 0; $i < 32; ++$i) {
define('BIT_' . $i, 1 << $i);
}
?>

5.const只能接受静态的标量,而define可以采用任何表达式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
const BIT_5 = 1 << 5;    // 无效的invalid
define('BIT_5', 1 << 5); // 有效的valid
?>

6.const定义的常量时大小写敏感,而define可以通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
define('FOO', 'BAR', true);
echo FOO; // BAR
echo foo; // BAR
?>

7.const是语言结构,define是函数,const更快

PHP排序函数

  • sort() 函数用于对数组单元从低到高进行排序。
  • rsort() 函数用于对数组单元从高到低进行排序。
  • asort() 函数用于对数组单元从低到高进行排序并保持索引关系。
  • arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。
  • ksort() 函数用于对数组单元按照键名从低到高进行排序。
  • krsort() 函数用于对数组单元按照键名从高到低进行排序。

参考文章

array_multisort:对列表型二维数组排序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 $data = array();
        $data[] = array('volume' => 67, 'edition' => 2);
        $data[] = array('volume' => 86, 'edition' => 1);
        $data[] = array('volume' => 85, 'edition' => 6);
        $data[] = array('volume' => 98, 'edition' => 2);
        $data[] = array('volume' => 86, 'edition' => 6);
        $data[] = array('volume' => 67, 'edition' => 7);
        $volume = array_column($data,'volume');
        $edition = array_column($data,'edition');
        //按照volume升序排
        array_multisort($volume,SORT_ASC,$data);

        //按照volume升序排,volume一样就按照edition降序排
        //array_multisort($volume,SORT_ASC,$edition,SORT_DESC,$data);
        print_r($data);

str_repeat

str_repeat() 函数把字符串重复指定的次数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo str_repeat("Shanghai",2);
//结果:ShanghaiShanghai
代码语言:javascript
代码运行次数:0
运行
复制

strstr

搜索字符串在另一字符串中的第一次出现

查找 "Shanghai" 在 "I loveShanghai! and Shanghai" 中的第一次出现,并返回字符串的剩余部分【包含第二个参数本身】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo strstr("I loveShanghai! and Shanghai","Shanghai");//Shanghai! and Shanghai

第三个参数默认false,如果设置为 "true",它将返回 第二个参数第一次出现之前的字符串部分【不包含第二个参数本身】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo strstr("I loveShanghai! and Shanghai","Shanghai",true);//I love

该函数对大小写敏感。如需进行不区分大小写的搜索,请使用 stristr() 函数

array_filter

用回调函数过滤数组中的单元(文档)

大部分可以用来过滤数组空的元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$data = [1,0,3,false,'',null,"tom",'0'];
print_r(array_filter($data));
//结果
Array
(
    [0] => 1
    [2] => 3
    [6] => tom
)

有回调函数的时候(该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回结果数组中,如果是false就不返回。数组键名保持不变,原数组不变):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

$arr = ['a','b',1,2,3];
$new_arr = array_filter($arr,function($val){
     return is_numeric($val); //过滤不是数字的值,is_numeric返回bool值
});
print_r($new_arr);
//结果:
Array
(
    [2] => 1
    [3] => 2
    [4] => 3
)

array_pop

弹出数组最后一个单元(出栈),原来的数据中将不不再有最后一个值了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$data = [1, 2, 3, 4];
print_r(array_pop($data));
//结果:
4
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$data = [
            [
                'name' => 'xxx',
                'age' => 12
            ],
            [
                'name' => 'yyy',
                'age' => 20
            ],
            [
                'name' => 'zzz',
                'age' => 30
            ]
        ];
print_r(array_pop($data));
//结果:
Array
(
    [name] => zzz
    [age] => 30
)
代码语言:javascript
代码运行次数:0
运行
复制

array_shift

第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$data = [1, 2, 3, 4];
print_r(array_shift($data));
print_r($data);
//结果:
1
Array
(
    [0] => 2
    [1] => 3
    [2] => 4
)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$data = [
            [
                'name' => 'xxx',
                'age' => 12
            ],
            [
                'name' => 'yyy',
                'age' => 20
            ],
            [
                'name' => 'zzz',
                'age' => 30
            ]
        ];

        print_r(array_shift($data));
        print_r($data);
//结果:
Array
(
    [name] => xxx
    [age] => 12
)
Array
(
    [0] => Array
        (
            [name] => yyy
            [age] => 20
        )

    [1] => Array
        (
            [name] => zzz
            [age] => 30
        )

)
代码语言:javascript
代码运行次数:0
运行
复制

array_slice

截取数组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$data = [1, 2, 3, 4];
print_r(array_slice($data,1,2));
print_r(array_slice($data,-1,1));
//结果:
Array
(
    [0] => 2
    [1] => 3
)
Array
(
    [0] => 4
)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$data = [
            [
                'name' => 'xxx',
                'age' => 12
            ],
            [
                'name' => 'yyy',
                'age' => 20
            ],
            [
                'name' => 'zzz',
                'age' => 30
            ]
        ];
        print_r(array_slice($data,1,2));
        print_r(array_slice($data,-1,1));
//结果:
Array
(
    [0] => Array
        (
            [name] => yyy
            [age] => 20
        )

    [1] => Array
        (
            [name] => zzz
            [age] => 30
        )

)
Array
(
    [0] => Array
        (
            [name] => zzz
            [age] => 30
        )

)
代码语言:javascript
代码运行次数:0
运行
复制

array_map

为数组的每个元素执行回调函数,返回一个新的数组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
$arr = [1,3,5];
$res = array_map(function($val){
    return $val*10; //每个值乘10
},$arr);
print_r($res);
print_r($arr);
//结果:
Array
(
    [0] => 10
    [1] => 30
    [2] => 50
)
Array
(
    [0] => 1
    [1] => 3
    [2] => 5
)

多个数组的时候:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$arr1 = [1,2,3,4,5];
$arr2 = [6,7,8,9,10];
$res = array_map(function($val1,$val2){
    return $val1 + $val2;
},$arr1,$arr2);
print_r($res);
//结果:
Array
(
    [0] => 7
    [1] => 9
    [2] => 11
    [3] => 13
    [4] => 15
)
代码语言:javascript
代码运行次数:0
运行
复制

array_walk

使用用户自定义函数对数组中的每个元素做回调处理,成功时返回 TRUE, 或者在失败时返回 FALSE

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
//将数组中的元素用于某种操作
$arr = ['a','b','c'];
array_walk($arr,function(&$val,$key){
    $val .= $val;
});
print_r($arr);
//结果:
Array
(
    [0] => aa
    [1] => bb
    [2] => cc
)

异同点

  • array_filter() 重点在于过滤(而不是新增)某个元素,当你处理到一个元素时,返回过滤后的数组
  • array_map() 重点在于遍历一个数组或多个数组的元素,返回一个新的数组
  • array_walk() 重点在于遍历数组进行某种操作
  • array_filter() 和 array_walk()对一个数组进行操作,数组参数在前,函数参数在后 array_map() 可以处理多个数组,因此函数参数在前,数组参数在后,可以根据实际情况放入多个数组参数

ceil()

ceil函数是向上取整函数,里面参数是float,返回值也是float

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo ceil(4.1); // 5
echo ceil(9.999); // 10
echo ceil(5);  //5
echo ceil(-1.2); // -1
echo ceil(-1); // -1

floor()

floor函数是向下取整,里面参数是float,返回值也是float

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo floor(4.1);  // 4
echo floor(9.999);  // 9
echo floor(5);  //5
echo floor(-1.2); // -2
echo floor(-1); // -1
代码语言:javascript
代码运行次数:0
运行
复制

round()

float round ( float precision = 0 [, int

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo round(3.4); // 3
echo round(3.5); // 4
echo round(3.6); // 4
echo round(3.6, 0); // 4
echo round(1.95583, 2); // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2); // 5.05
echo round(5.055, 2); // 5.06

round 的参数一是数据源,参数二是要保留的小数位而且之后一位(比如你输入2那么第3为是之后一位)被四舍五入,当他是负数的时候,从数据源最后一位开始往前数相应的长度制0并将最后一位四舍五入比如round(123456,-2) 就是123456从6开始往前数两位都变成零,并且最后一位5(从后往前数第一位是6最后一位是5)被四舍五入,输出123500。当第二个参数为0时候,结果相当于对数字取整并四舍五入。

还有使用sprintf对数据四舍五入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$n=0.1265489;
echo sprintf("%.2f", $n); // 0.13

$_GET

http://localhost/api?a=1+2&b=1%3&c=yy3#4&d=6@22

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo $_GET["a"]; //1 2
echo $_GET["b"]; //1%3
echo $_GET["c"]; //yy3
echo $_GET["d"]; //报错:Undefined index: d

$_GET会把'#'字符后面的过滤掉(所以上面报错不识别d),‘+’会转为空

PHP两种数组合并方式区别示例

对于重复的字符串键,+操作后,前面数组的键值会覆盖后面的

对于重复的数字键,+操作后,前面数组的键值会覆盖后面的,保留之前数字键

对于重复的字符串键,array_merge后,后面数组的键值会覆盖前面的

对于重复的数字键,array_merge后,重排数字键,不会覆盖

参考文章

PHP ...$arg使用

在PHP 5.6及更高版本中,参数列表可能包含...标记,表示该函数接受可变数量的参数。参数将作为数组传递给给定变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
//声明时使用
function sum(...$numbers) {
    //var_dump($numbers); //$numbers是个数组值为:[1,2,3,4]
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}
//10
echo sum(1, 2, 3, 4);
?>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
//调用时使用
function add($a, $b) {
    var_dump($a);//int(1)
    var_dump($b); //int(2)
    return $a + $b;
}
//3
echo add(...[1, 2])."\n";
//3
$arr = [1, 2];
echo add(...$arr);//$arr的值会循环赋值给add里面的参数($a为1,$b为2)
?>

参考文章

获取每个月的第一天和最后一天

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo date("Y-m-d H:i:s",strtotime('first day of today')); //2020-04-01 00:00:00
echo date("Y-m-d H:i:s",strtotime('last day of 23:59'));  //2020-04-30 23:59:00
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农编程进阶笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PHP 数组使用之道
这个教程我将通过一些实用的实例和最佳实践的方式列举出 PHP 中常用的数组函数。每个 PHP 工程师都应该掌握它们的使用方法,以及如何通过组合使用来编写更精简且易读的代码。
柳公子
2018/09/17
1.2K0
PHP 中操作数组的知识点
数组的赋值: PHP中的数组既可以做数组,也可以做键值对字典,且不存在限制,非常灵活.
王 瑞
2022/12/28
2.5K0
php常用函数分类整理
一、数组操作的基本函数 数组的键名和值 array_values($arr);  获得数组的值 array_keys($arr);  获得数组的键名 array_flip($arr);  数组中的值与键名互换(如果有重复前面的会被后面的覆盖) in_array("apple",$arr);  在数组中检索apple array_search("apple",$arr);  在数组中检索apple ,如果存在返回键名 array_key_exists("apple",$arr);  检索给定的键名是否存在数组中 isset($arr[apple]):   检索给定的键名是否存在数组中 数组的内部指针 current($arr);  返回数组中的当前单元 pos($arr);  返回数组中的当前单元 key($arr);  返回数组中当前单元的键名 prev($arr);  将数组中的内部指针倒回一位 next($arr);  将数组中的内部指针向前移动一位 end($arr);  将数组中的内部指针指向最后一个单元 reset($arr;  将数组中的内部指针指向第一个单元 each($arr);  将返回数组当前元素的一个键名/值的构造数组,并使数组指针向前移动一位 list($key,$value)=each($arr);  获得数组当前元素的键名和值 数组和变量之间的转换 extract($arr);用于把数组中的元素转换成变量导入到当前文件中,键名当作变量名,值作为变量值 注:(第二个参数很重要,可以看手册使用)使用方法 echo $a; compact(var1,var2,var3);用给定的变量名创建一个数组 二、数组的分段和填充 数组的分段 array_slice($arr,0,3);  可以将数组中的一段取出,此函数忽略键名 array_splice($arr,0,3,array("black","maroon"));  可以将数组中的一段取出,与上个函数不同在于返回的序列从原数组中删除 分割多个数组 array_chunk($arr,3,TRUE);  可以将一个数组分割成多个,TRUE为保留原数组的键名 数组的填充 array_pad($arr,5,'x');  将一个数组填补到制定长度 三、数组与栈 array_push($arr,"apple","pear");  将一个或多个元素压入数组栈的末尾(入栈),返回入栈元素的个数 array_pop($arr);  将数组栈的最后一个元素弹出(出栈) 四、数组与列队 array_shift($arr);数组中的第一个元素移出并作为结果返回(数组长度减1,其他元素向前移动一位,数字键名改为从零技术,文字键名不变) array_unshift($arr,"a",array(1,2));在数组的开头插入一个或多个元素 五、回调函数 array_walk($arr,'function','words');  使用用户函数对数组中的每个成员进行处理(第三个参数传递给回调函数function) array_mpa("function",$arr1,$arr2);  可以处理多个数组(当使用两个或更多数组时,他们的长度应该相同) array_filter($arr,"function");  使用回调函数过滤数组中的每个元素,如果回调函数为TRUE,数组的当前元素会被包含在返回的结果数组中,数组的键名保留不变 array_reduce($arr,"function","*");  转化为单值函数(*为数组的第一个值) 六、数组的排序 通过元素值对数组排序 sort($arr);  由小到大的顺序排序(第二个参数为按什么方式排序)忽略键名的数组排序 rsort($arr);  由大到小的顺序排序(第二个参数为按什么方式排序)忽略键名的数组排序 usort($arr,"function");  使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)忽略键名的数组排序 asort($arr);  由小到大的顺序排序(第二个参数为按什么方式排序)保留键名的数组排序 arsort($arr);  由大到小的顺序排序(第二个参数为按什么方式排序)保留键名的数组排序 uasort($arr,"function");  使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)保留键名的数组排序 通过键名对数组排序 ksort($arr);  按照键名正序排序 krsort($arr);  按照键名逆序排序 uksort($arr,"function");  使用用户自定义的比较函数对数组中的键名进
十月梦想
2018/08/29
8390
PHP 中最常用的 100 个函数
PHP 静态分析引擎 Exakat 分析了 1900 个 PHP 开源项目,整理了最常用的 100 个 PHP 函数:
Denis
2023/04/13
3020
webshell变形记之一
虽然进行了变形,但是还是被检测出来了4级,这个变形也是比较鸡肋,所以可以配合其他的php函数进行变形
vFREE
2022/08/08
1.1K0
php参考手册Array函数(完结了)
<?php //array_change_key_case() $age=['cyg'=>"kkk","liwen"=>"70"]; print_r(array_change_key_case($a
贵哥的编程之路
2022/05/06
2.1K0
php参考手册Array函数(完结了)
跟我学习php数组常用函数-上篇
对于php的初学者,也许会对它大量的函数不清楚该学习哪些。我在这列举了一些大家实际当中可能会使用到的,供您参考 ---- array_map ( callable $callback ,
潇洒哥和黑大帅
2018/10/23
6320
PHP 开发基础知识笔记
设置Cookie登录: 基于Cookie设置实现的用户登录模块,清空与设置Cookie选项.
王 瑞
2022/12/28
1.9K0
想学习php的,不如来这里看看
win+R打开命令行,cmd进DOS窗口 DOS命令开启关闭Apache和Mysql Apache启动关闭命令
Wizey
2018/08/30
1.4K0
想学习php的,不如来这里看看
读书笔记《PHP与MySQL程序设计》一
第1章 PHP概述 1.1  历史(PHP4、PHP5、PHP5.3、PHP6[未发布]) 1.2 一般语言特性(实用性、强大功能、可选择性、成本[开源]) 第2章 环境配置 2.1 安装的前提条件(apache或IIS7) 2.2 在Linux上安装Apache和PHP 2.3 在Windows上安装Apache和PHP 2.4 在Windows上安装IIS和PHP 2.5 测试安装 2.6 配置PHP 2.7 运行时配置 2.8 选择代码编辑器 2.9 选择WEB托管服务商 第3章 PHP基础 3.1
小古哥
2018/03/08
2.4K0
php array_multisort
array_multisort() 函数返回排序数组。您可以输入一个或多个数组。函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序。
全栈程序员站长
2022/07/07
4490
PHP数组函数下与二维多维数组与数组的遍历(终点篇)
把数组分割为带有两个元素的数组块:意思是我看一下,记住了呀,兄弟们,这像是二维数组一样的吧,分成两个元素两个元素的,第一个两个元素的前面是(下标0),然后是第二个两个元素的是(下标1)哈
贵哥的编程之路
2020/10/28
1.9K0
PHP数组函数下与二维多维数组与数组的遍历(终点篇)
学会代码执行函数,让老哥带你勇闯天涯!
最近研究PHP的一些危险函数,先写下代码执行函数的归纳,主要是参考自官方手册的解读,并附上了一些dogBypass的一句话,为什么是dog呢?因为在我看来dog比较适合练手,所以本篇所有bypass仅适用dog(事实是因为时间有限 没有研究其他防护软件~),其他的防护需要自行测试,大家如果有其他代码执行函数也可提出,一起讨论交流。 本次将分为两篇进行讲解: 本篇涉及函数:eval()、assert()、preg_repace()、create_function()、array_map() 下篇涉及函数:ca
漏斗社区
2018/03/28
1.2K0
学会代码执行函数,让老哥带你勇闯天涯!
PHP数组操作
1.shuffle将数组打乱 <?php $my_array = array("a" => "Dog", "b" => "Cat", "c" => "Horse"); shuffle($my_arra
wangxl
2018/03/07
4.6K0
Array数组函数(三)
array_keys — 返回数组中所有的键名 array_values — 返回数组中所有的值 array_key_exists — 检查给定的键名或索引是否存在于数组中 <?php$phpha=
wangxl
2018/03/07
1K0
后端逆袭,一份不可多得的PHP学习指南
我想问自己,为什么要学习PHP,什么是PHP,学习之后,我能做什么,未来的发展,那么如何学习一门编程语言,如何给出学习建议。
达达前端
2020/09/24
2.9K0
后端逆袭,一份不可多得的PHP学习指南
PHP回调函数与匿名函数实例详解
本文实例讲述了PHP回调函数与匿名函数。分享给大家供大家参考,具体如下: 回调函数和匿名函数 回调函数、闭包在JS中并不陌生,JS使用它可以完成事件机制,进行许多复杂的操作。PHP中却不常使用,今天来说一说PHP中中的回调函数和匿名函数。 回调函数 回调函数:Callback (即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。 通俗的解释就是把函数作为参数传入进另一个函数中使用;PHP中有许多 “需求参数为函数” 的函数,像array_map,usort,call_user_func_array之类,他们执行传入的函数,然后直接将结果返回主函数。好处是函数作为值使用起来方便,而且代码简洁,可读性强。 匿名函数 匿名函数,顾名思义,是没有一个确定函数名的函数,PHP将匿名函数和闭包视作相同的概念(匿名函数在PHP中也叫作闭包函数)。它的用法,当然只能被当作变量来使用了。 PHP中将一个函数赋值给一个变量的方式有四种: ① 我们经常会用到的:函数在外部定义/或PHP内置,直接将函数名作为字符串参数传入。注意:如果是类静态函数的话以CLASS::FUNC_NAME的方式/【php教程_linux常用命令_网络运维技术】/传入。 ② 使用create_function($args, $func_code);创建函数,会返回一个函数名。 $func_code为代码体,$args为参数字符串,以','分隔; ③ 直接赋值:$func_name = function($arg){statement} ④ 直接使用匿名函数,在参数处直接定义函数,不赋给具体的变量值; 第一种方式因为是平常所用,不再多提;第二种类似eval()方法的用法,也被PHP官方列为不推荐使用的方式,而且其定义方式太不直观,我除了测试外,也没有在其他地方使用过,也略过不提。在这里重点说一下第三种和第四种用法; 后两种创建的函数就被称为匿名函数,也就是闭包函数, 第三种赋值法方式创建的函数非常灵活,可以通过变量引用。可以用 is_callable($func_name) 来测试此函数是否可以被调用, 也可以通过$func_name($var)来直接调用;而第四种方式创建的函数比较类似于JS中的回调函数,不需要变量赋值,直接使用; 另外要特别介绍的是 use 关键词,它可以在定义函数时,用来引用父作用域中的变量;用法为 function($arg) use($outside_arg) {function_statement} 。其中$outside_arg 为父作用域中的变量,可以在function_statement使用。 这种用法用在回调函数“参数值数量确定”的函数中。 如usort需求$callback的参数值为两项,可是我们需要引入别的参数来影响排序怎么办呢?使用use()关键词就很方便地把一个新的变量引入$callback内部使用了。 array_map/array_filter/array_walk: 把这三个函数放在一块是因为这三个函数在执行逻辑上比较类似,类似于下面的代码:
用户2323866
2021/06/30
1.4K0
数组 函数_从零开始的基础篇
array_flip($arr);数组中的值与键名互换(如果有重复前面的会被后面的覆盖)
全栈程序员站长
2022/09/20
9990
PHP manual(update)
直接改变数组的值自 PHP 5 起可以通过引用传递来做到。之前的版本需要需要采取变通的方法
仇诺伊
2018/09/12
1.2K0
PHP中的回调函数和匿名函数
枕边书
2018/01/04
3.5K0
相关推荐
PHP 数组使用之道
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验