前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >PHP函数

PHP函数

原创
作者头像
码一
发布于 2022-06-01 02:32:40
发布于 2022-06-01 02:32:40
3K0
举报
文章被收录于专栏:码园码园

本文是复习所写,并不会涵盖一些基础知识点

用户自定义函数

代码语言:php
AI代码解释
复制
<?php

/**
 * 示例函数
 *
 * @param mixed $arg1 参数一
 * @param mixed $arg2 参数二
 * @param mixed $argN 参数N
 * @return mixed 
 */
function foo($arg1, $arg2, $argN)
{
    return 'called!';
}
  • PHP中函数是全局的,只要定义了就可以在任何地方调用
  • 函数内部可以写任何有效的PHP代码,就算定义函数和类也是可以的
  • PHP不支持函数重载,也不能取消定义和重写义已声明函数
  • 递归调用时,要避免超过100~200层

函数参数

  • 引用传参
代码语言:php
AI代码解释
复制
<?php
function foo(&$arg)
{
    $arg = 1;
}

在参数前面加上&可以将值传递变为引用传递,在函数内对变量做的操作会改变函数外的变量

  • 参数默认值
代码语言:php
AI代码解释
复制
<?php
function foo($arg='demo')
{
    var_dump($arg);
}

默认值必须是常量表达式,不能是变量、类成员、函数调用等

  • 可变数量参数
代码语言:php
AI代码解释
复制
<?php
function foo($arg, ...$args)
{
    var_dump($arg);
    var_dump($args);
}
foo(1,2,3,4,5);
foo([1,2,3]);

在参数前加...来标识这个参数是可变参数

可变参数只能是参数列表中最后一个

也可以通过func_num_args()func_get_arg()func_get_args()函数来获取可变参数

  • 命名参数 <sub>PHP 8</sub>

有了命名参数后在调用函数时就可以忽略参数顺序,配合参数默认值使用的话就可以在使用函数时只传需要的参数而不必要将无意义的值也传上

命名参数通过在参数名前加上冒号来传递,可以使用保留关键字,但不能使用变量

代码语言:php
AI代码解释
复制
<?php
  
function foo(first_num: $a, last_num: $b)
{
    return $a + $b;
}  

返回值

使用return可以返回任何类型数据,return会立即终止函数的执行,并将执行权交还给调用者

可以使用list解包数组类型的返回值

代码语言:php
AI代码解释
复制
<?php
function foo()
{
    return ['one', 'two'];
}
list($a, $b) = foo();

函数返回引用类型值时,函数声明和函数调用前都必须加&

代码语言:php
AI代码解释
复制
<?php
function &foo()
{
    $a = 1;
    return $a;
}
$b = &foo();

可变函数

如果变量名后有(),PHP将寻找与变量的值同名的函数,并尝试执行

代码语言:php
AI代码解释
复制
<?php

$funName = 'foo';

// 函数
function foo($a)
{
    var_dump($a);
}
$funName('demo');

// 类方法
class Test()
{
    static $foo = 'attribute';
    
    public function foo($a)
    {
        var_dump($a);
    }
    
    public static function two($a)
    {
        var_dump($a);
    }
    
}
(new Test())->$funName('test'); // 方式一

$fun = ['Test', 'foo']; // 方式二
$fun();

$fun = [new Test, 'foo']; // 方式三
$fun();

$fun = 'Test::two'; // 类静态方法
$fun();

内部函数

PHP有很多内置函数,有些函数是需要和特定的扩展一起编译

function_exists()判断函数是否存在

get_extension_funcs()获取某个模块的函数列表

dl()加载模块

匿名函数

匿名函数是通过Closure类来实现

匿名函数可以用use来从父类继承变量,也可以定义参数

代码语言:php
AI代码解释
复制
<?php
$a = 1;
$fun = functon ($b) use ($a) {
    echo $a + $b;
};

在类中使用时,会在匿名函数内部自动绑定$this

代码语言:php
AI代码解释
复制
<?php

class Test()
{
    public $attr = 1;
    
    public function foo()
    {
        return function (){
            var_dump($this);
        }
    }
    
    // 当不需要自动绑定时,可以将匿名函数静态化
    public function two()
    {
        return static function() {
            var_dump($this);
        }
    }
}

箭头函数 <sub>PHP 7.4</sub>

箭头函数跟匿名函数一样,都是通过Closure实现,只是比匿名函数更简洁,也只能实现比较简单的功能

箭头函数会自动捕获父作用域变量进行值拷贝

代码语言:php
AI代码解释
复制
<?php
$x = 1;
$fn = fn($a, $b) => $a + $b + $x;
var_dump($fn(1, 2));

// 箭头函数可以嵌套
$fn = fu($a) => fu($b) => $a + $b;
var_dump($fn(1)(2));

First class callable syntax <sub>PHP 8.1</sub>

这是一中引用闭包的新方法

代码语言:php
AI代码解释
复制
<?php
// PHP8.1之前
// 使用Closure将函数转成闭包形式
$closure = Closure::fromCallable('strlen');
var_dump($closure('sssss'));

// PHP8.1
$closure = strlen(...);
var_dump($closure('demo'));

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
认识PHP函数
PHP 在用户自定义函数中支持可变数量的参数列表。在 PHP 5.6 及以上的版本中,由 ... 语法实现;在 PHP 5.5 及更早版本中,使用函数 func_num_args(),func_get_arg(),和 func_get_args() 。
老雷PHP全栈开发
2020/07/02
3.5K0
学习PHP函数
PHP 在用户自定义函数中支持可变数量的参数列表。在 PHP 5.6 及以上的版本中,由 ... 语法实现;在 PHP 5.5 及更早版本中,使用函数 func_num_args(),func_get_arg(),和 func_get_args() 。
老雷PHP全栈开发
2020/07/02
4240
php函数基础(一)
有效的函数名以字母或下划线开头,后面跟字母,数字或下划线,注意:不能用数字开头。
全栈程序员站长
2022/07/08
9250
php函数基础(一)
编程日记:PHP实用函数记录(二)
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数 callable参数的值。
房东的狗丶
2023/02/17
7360
PHP丨PHP基础知识之PHP基础入门——函数「理论篇」
前两天讲过PHP基础知识的判断条件和流程控制,今天来讲讲PHP基础知识之PHP基础入门--函数!
大脸猫
2020/06/15
1.1K0
PHP丨PHP基础知识之PHP基础入门——函数「理论篇」
PHP 8 所有新特性一览和代码示例
PHP 8 正式版即将发布:10 月 29 日会发布 RC3,11 月 12 日会发布 RC4,11 月 26 日会发布正式版本。
学院君
2020/10/30
1.2K0
PHP 8 所有新特性一览和代码示例
Python入门-函数
此处的函数区别于我们数学上的函数,在编程世界中,函数(Functions)是指可重复使用的程序片段。它们允许你为某个代码块赋予名字,允许你 通过这一特殊的名字在你的程序任何地方来运行代码块,并可重复任何次数。这就是所谓的调用函数。我们已经使用过了许多内置的函数,例如 len 和 range 。
py3study
2020/01/03
4810
es6箭头函数详解_es6的新特性
使用ES6箭头函数语法定义函数,将原函数的“function”关键字和函数名都删掉,并使用“=>”连接参数列表和函数体。
全栈程序员站长
2022/08/03
2930
es6箭头函数详解_es6的新特性
PHP匿名函数与匿名类详解
引用官方的一句话:匿名函数(Anonymous functions),也叫闭包函数(closures),允许临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。
高久峰
2023/09/18
2860
PHP匿名函数与匿名类详解
引用官方的一句话:匿名函数(Anonymous functions),也叫闭包函数(closures),允许临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。
陈大剩博客
2023/03/22
8980
Datawhale组队学习 -- Task 6: 函数与Lambda表达式
Python 的函数具有非常灵活多样的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。从简到繁的参数形态如下:
余生大大
2022/11/02
2530
PHP 闭包及Closure类
上面就是一个简单的匿名函数,定义一个函数体,将函数体赋值给一个变量(php5.3之后支持该写法)。
猿哥
2019/11/27
8390
PHP7新特性和变化
组合比较符号用于比较两个表达式。当 a 小于、等于或大于 b 时它分别返回-1、0或1,比较规则延续常规比较规则。对象不能进行比较
憧憬博客
2021/03/05
4K0
php关于闭包(匿名函数)的理解
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。
黄啊码
2020/05/29
1.2K0
Python函数
位置可变参数可以在普通参数之前, 但是在位置可变参数之后的普通参数变成了keyword-only参数:
职场亮哥
2020/10/10
2.6K0
PHP笔记(一)
数据库项目作业要团队开发 web,选择了尝试后端,又向做出自己的网站这个目标踏出了一步。
赤蓝紫
2023/01/02
1.3K0
PHP笔记(一)
基于PHP函数的操作方法
//可变参数的函数(特殊用法) function sum(){ $arr = func_get_args(); $sum = 0; for($i=0;$i<count($arr);$i++){ $sum+=$arr[$i]; } echo $sum; } sum(1,2,5);
用户2323866
2021/07/01
2590
7-函数
当存在多个默认参数的时候,调用的时候,既可以按顺序提供默认参数,比如调用enroll('Bob', 'M', 7),意思是,除了name,gender这两个参数外,最后1个参数应用在参数age上,city参数由于没有提供,仍然使用默认值。
用户3106371
2019/03/11
7490
7-函数
化整为零优化重用,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang函数的定义和使用EP07
    函数是基于功能或者逻辑进行聚合的可复用的代码块。将一些复杂的、冗长的代码抽离封装成多个代码片段,即函数,有助于提高代码逻辑的可读性和可维护性。不同于Python,由于 Go lang是编译型语言,编译之后再运行,所以函数的定义顺序无关痛痒。
用户9127725
2022/09/21
2030
PHP 函数篇(下):匿名函数和作用域
从 PHP 5.3 开始,引入了对匿名函数的支持,所谓匿名函数就是在函数定义中没有显式声明函数名,在 PHP 中,匿名函数也被称作闭包函数(Closure)。
学院君
2020/06/02
1K0
相关推荐
认识PHP函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档