PHP8中自定义函数-PHP8知识详解

1、什么是函数

函数,在英文中的单词是function,这个词语有功能的意思,也就是说,使用函数就是在编程的过程中,实现一定的功能。即函数就是实现一定功能的一段特定代码。

在前面的教学中,我们已经学习到了函数的使用了,比如,使用define()函数定义一个常量。在这里我们来讲解自定义函数

任何有效的 php 代码都有可能出现在函数内部,甚至包括其它函数和 类 定义。

函数名和 PHP 中的其它标识符命名规则相同。有效的函数名以字母或下划线打头,后面跟字母,数字或下划线。可以用正则表达式表示为: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$。

PHP 中的所有函数和类都具有全局作用域,可以定义在一个函数之内而在之外调用,反之亦然。

PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数。

2、什么是自定义函数?

自定义函数是一种在编程中创建的用户自定义的功能代码块。它们允许程序员定义自己的函数,并根据需要在程序中调用它们。自定义函数可以接收参数,执行特定的任务,并返回一个值。

通过使用自定义函数,程序员可以将复杂的任务分解为更小的可重用代码块,提高代码的可读性和可维护性。自定义函数是编程中常用的概念,几乎在所有的编程语言中都有支持。在PHP8中也不例外。

3、定义和调用函数

一般情况下,程序员面对的是自定义函数。其语法结构如下:

function 函数名称(参数1,参数2,......){
  函数的具体内容;
}

函数定义完成以后,即可调用这个函数。调用函数的操作比较简单,直接引用函数名并赋予正确的参数,即可完成函数的调用。

<?php

// 定义一个函数
function myfun($a, $b) {
    $sum = $a + $b;
    $product = $a * $b;
    
    // 返回求和和求积的结果作为https://www.phpfw.com/tag/shuzu/
    return array($sum, $product);
}

// 调用myfun()函数并输出结果
$results = myfun(10, 20);
echo "求和计算结果是: " . $results[0] . "<br>";
echo "求积的计算结果是: " . $results[1];

?>

以上代码在PHP8中的运行结果为:

求和计算结果是: 30
求积的计算结果是: 200

4、函数中的变量作用域

所谓 变量作用域,是指特定变量在代码中可以被访问到的位置。在PHP8中,有6种基本变量作用域法则:

一、内置超全局变量。在代码中任意位置都能访问的变量。

二、常数。一旦声明,他就是全局性的,可以在函数的内外使用。

三、全局变量。在代码声明中,可以爱代码中访问,但是不能在函数内部访问。

四、在函数中声明为全局变量的变量。就是同名的全局变量。

五、在函数中创建和声明为静态变量的变量。该变量在函数外是无法访问的,但是这个静态变量的值是可以保留的。

六、在函数中创建和声明的局部变量。在函数外是无法访问的,并且在本函数终止时终止并推出。

4.1、超全局变量

PHP 中的许多预定义变量都是"超全局的",这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。

这些超全局变量是:

$GLOBALS:它是一个包含了当前脚本中所有全局变量的数组。

$_SERVER:它是一个包含了服务器和执行环境信息的数组,如 HTTP 请求头、路径等。

$_GET:它是一个包含通过 GET 方法传递给当前脚本的参数和值的数组。

$_POST:它是一个包含通过 POST 方法传递给当前脚本的参数和值的数组。

$_FILES:它是一个包含上传文件的相关信息的数组,包括文件名、类型、大小等。

$_COOKIE:它是一个包含客户端发送的 Cookie 的相关信息的数组。

$_SESSION:它是一个包含用户会话数据的数组,用于存储特定用户在不同页面之间共享的数据。

$_REQUEST:它是一个包含了通过 HTTP 请求方法(GET、POST和COOKIES)传递给当前脚本的参数和值的数组。

$_ENV:它是一个包含环境变量的数组,这些变量是由操作系统或 web 服务器设置的。

请注意,对这些超全局变量进行直接引用可能存在安全性和可靠性问题。在使用时,请确保验证和过滤来自用户的输入以防止潜在的安全漏洞。

4.2、全局变量

全局变量就是在函数外声明的变量,在代码中可以访问,但是在函数内部是不能访问的。这是因为函数默认就不能访问起外部的全局变量。

函数内访问全局变量示范代码:

<?php
$a = "PHP";  //定义全局变量
function xuexi() {           // 定义一个函数
echo "正在学习的是: " .$a;   //函数内调用全局变量
}
xuexi();    //运行函数
?>

在PHP8中运行的结果为:

Warning: Undefined variable $a in D:\https://www.phpfw.com/tag/phpenv/\www\localhost\test.php on line 4
正在学习的是:

上面内容明显是异常信息,如果想让函数访问某个全局变量,可以在函数中使用global关键字来声明。

使用global关键字访问全局变量,示例代码:

<?php
$a = "PHP";  //定义全局变量
function xuexi() {           // 定义一个函数
global $a;                   //函数内声明全局变量
echo "正在学习的是: " .$a;   //函数内调用全局变量
}
xuexi();    //运行函数
?>

在PHP8中运行的结果为:

正在学习的是: PHP

也可以使用超全局变量中的$GLOBALS数组进行访问。

使用$GLOBALS数组进行访问全局变量,示范代码:

<?php
$a = "PHP8";  //定义全局变量
function xuexi() {           // 定义一个函数
$a = $GLOBALS["a"];          //通过$GLOBALS数组访问全局变量
echo "正在学习的是: " .$a;   //函数内调用全局变量
}
xuexi();    //运行函数
?>

在PHP8中运行的结果为:

正在学习的是: PHP8

3、静态变量

静态变量只是在函数内存在,函数外无法访问。但是执行以后,其值会保留。

也就是说,这一次执行完毕以后,这个静态变量的值保留,下一次执行此函数,这个值还可以调用。

当在 PHP 8 中使用静态变量时,您可以在函数内部声明一个变量,并在后续的调用中保持其值不变。这样做可以在多次函数调用之间共享数据。

以下是一个示例代码:

<?php
function increment() {
    static $counter = 0;
    $counter++;
    echo "Counter value: " . $counter . "<br>";
}

increment(); 
increment(); 
increment(); 
?>

以上代码在PHP8中运行的结果为:

Counter value: 1
Counter value: 2
Counter value: 3

在上面的代码中,我们定义了一个名为 $counter 的静态变量,并初始化为 0。每当 increment() 函数被调用时,该变量都会自增并输出当前计数器的值。

由于 $counter 是一个静态变量,在函数调用之间它的值得以保持和共享。因此,每次调用 increment() 都会使计数器递增。

相关推荐
龙哥·三年风水7 小时前
群控系统服务端开发模式-应用开发-个人资料
分布式·php·群控系统
Dingww101112 小时前
梧桐数据库中的网络地址类型使用介绍分享
数据库·oracle·php
Genius Kim15 小时前
SpringCloud Sentinel 服务治理详解
spring cloud·sentinel·php
萧鼎18 小时前
【Python】强大的正则表达式工具:re模块详解与应用
开发语言·python·正则表达式
原机小子19 小时前
城镇保障性住房管理:SpringBoot系统解决方案
数据库·spring boot·php
kali-Myon20 小时前
NewStarCTF2024-Week5-Web&Misc-WP
前端·python·学习·mysql·web安全·php·web
DK七七21 小时前
当今陪玩系统小程序趋势,陪玩系统源码搭建后的适用于哪些平台
小程序·php·uniapp
tekin1 天前
vscode php Launch built-in server and debug, PHP内置服务xdebug调试,自定义启动参数配置使用示例
ide·vscode·php·launch.json·runtimeargs·php内置服务自定义参数
The_Ticker1 天前
PHP查询实时股票行情
开发语言·php·学习方法
y0ungsheep1 天前
CTF中的phar反序列化 [SWPU 2018]SimplePHP
运维·web安全·网络安全·php·代码规范