当前位置: 首页 > news >正文

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

1、什么是函数?

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

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

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

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

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

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

Image

2、什么是自定义函数?

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

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

3、定义和调用函数

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

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

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

<?php// 定义一个函数
function myfun($a, $b) {$sum = $a + $b;$product = $a * $b;// 返回求和和求积的结果作为数组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:\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() 都会使计数器递增。

 

相关文章:

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

1、什么是函数&#xff1f; 函数&#xff0c;在英文中的单词是function&#xff0c;这个词语有功能的意思&#xff0c;也就是说&#xff0c;使用函数就是在编程的过程中&#xff0c;实现一定的功能。即函数就是实现一定功能的一段特定代码。 在前面的教学中&#xff0c;我们已…...

虚拟化技术:云计算发展的核心驱动力

文章目录 虚拟化技术的概念和作用虚拟化技术的优势虚拟化技术对未来发展的影响结论 &#x1f389;欢迎来到AIGC人工智能专栏~虚拟化技术&#xff1a;云计算发展的核心驱动力 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系…...

光伏+旅游景区

传统化石燃料可开发量逐渐减少&#xff0c;并且对环境造成的危害日益突出。全世界都把目光投向了可再生能源&#xff0c;希望可再生能源能够改变人类的能源结构。丰富的太阳能取之不尽、用之不竭&#xff0c;同时对环境没有影响&#xff0c;光伏发电是近些年来发展最快&#xf…...

手搓文本向量数据库(自然语言搜索生成模型)

import paddle import jieba import pandas as pd import numpy as np import os from glob import glob from multiprocessing import Process, Manager, freeze_supportfrom tqdm import tqdm# 首先 确定的是输出的时候一定要使用pd.to_pickle() pd.read_pickle() # 计算的时…...

EVO大赛是什么

价格是你所付出的东西&#xff0c;而价值是你得到的东西 EVO大赛是什么&#xff1f; “EVO”大赛全称“Evolution Championship Series”&#xff0c;是北美最高规格格斗游戏比赛&#xff0c;大赛正式更名后已经连续举办12年&#xff0c;是全世界最大规模的格斗游戏赛事。常见…...

linux中使用clash代理

本机环境&#xff1a;ubuntu16 安装代理工具&#xff08;这里使用clash&#xff09; 可以手动下载解压&#xff0c;下载地址&#xff1a;https://github.com/Dreamacro/clash 也可以直接使用命令行&#xff0c;演示如下&#xff1a; userlocalhost:~$ curl https://glados.r…...

Kafka3.0.0版本——Follower故障处理细节原理

目录 一、服务器信息二、服务器基本信息及相关概念2.1、服务器基本信息2.2、LEO的概念2.3、HW的概念 三、Follower故障处理细节 一、服务器信息 三台服务器 原始服务器名称原始服务器ip节点centos7虚拟机1192.168.136.27broker0centos7虚拟机2192.168.136.28broker1centos7虚拟…...

13.redis集群、主从复制、哨兵

1.redis主从复制 主从复制是指将一台redis服务器&#xff08;主节点-master&#xff09;的数据复制到其他的redis服务器&#xff08;从节点-slave&#xff09;&#xff0c;默认每台redis服务器都是主节点&#xff0c;每个主节点可以有多个或没有从节点&#xff0c;但一个从节点…...

linux字符串处理

目录 1 C 截取字符串,截取两个子串中间的字符串2 获取该字符串后面的字符串用 strstr() 函数查找需要提取的特定字符串&#xff0c;然后通过指针运算获取该字符串后面的字符串用 strtok() 函数分割字符串&#xff0c;找到需要提取的特定字符串后&#xff0c;调用 strtok() 传入…...

Nginx入门——Nginx的docker版本和windows版本安装和使用 代理的概念 负载分配策略

目录 引出nginx是啥正向代理和反向代理正向代理反向代理 nginx的安装使用Docker版本的nginx安装下载创建挂载文件获取配置文件创建docker容器拷贝容器中的配置文件删除容器 创建运行容器开放端口进行代理和测试 Windows版本的使用反向代理多个端口运行日志查看启动关闭重启 负载…...

Zebec Protocol:模块化 L3 链 Nautilus Chain,深度拓展流支付体系

过去三十年间&#xff0c;全球金融科技领域已经成熟并迅速增长&#xff0c;主要归功于不同的数字支付媒介的出现。然而&#xff0c;由于交易延迟、高额转账费用等问题愈发突出&#xff0c;更高效、更安全、更易访问的支付系统成为新的刚需。 此前&#xff0c;咨询巨头麦肯锡的一…...

Oracle-rolling upgrade升级19c

前言: 本文主要描述Oracle11g升19c rolling upgrade升级测试&#xff0c;通过逻辑DGautoupgrade方式实现rolling upgrade&#xff0c;从而达到在较少停机时间内完成Oracle11g升级到19c的目标 升级介绍&#xff1a; 升级技术: rolling upgrade轮询升级&#xff0c;通过采用跨版…...

Spring IOC详解

Spring 笔记 官网&#xff1a;https://spring.io/ 核心功能&#xff1a;当你的项目启动的时候&#xff0c;自动的将当前项目的各种 Bean 都自动的注册到 Spring 容器中&#xff0c;然后在项目的其他地方&#xff0c;如果需要用到这些 Bean&#xff0c;直接去 Spring 容器中查…...

Unity——DOTween插件使用方法简介

缓动动画既是一种编程技术&#xff0c;也是一种动画的设计思路。从设计角度来看&#xff0c;可以有以下描述 事先设计很多基本的动画样式&#xff0c;如移动、缩放、旋转、变色和弹跳等。但这些动画都以抽象方式表示&#xff0c;一般封装为程序函数动画的参数可以在使用时指定&…...

数据库——Redis 单线程模型详解

文章目录 Redis 基于 Reactor 模式来设计开发了自己的一套高效的事件处理模型 &#xff08;Netty 的线程模型也基于 Reactor 模式&#xff0c;Reactor 模式不愧是高性能 IO 的基石&#xff09;&#xff0c;这套事件处理模型对应的是 Redis 中的文件事件处理器&#xff08;file …...

leetcode 567. 字符串的排列(滑动窗口-java)

滑动窗口 字符串的排列滑动窗口代码演示进阶优化版 上期经典 字符串的排列 难度 -中等 leetcode567. 字符串的排列 给你两个字符串 s1 和 s2 &#xff0c;写一个函数来判断 s2 是否包含 s1 的排列。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 换句…...

Git —— 分支重命名操作

在开发中&#xff0c;对某个分支进行重命名的操作&#xff1a; 1、本地分支重命名 本地分支是指&#xff1a;你当前这个分支还没有推送到远程的情况&#xff0c;这种情况修改分支名称就要方便很多 git branch -m 原始名称 新名称 //示例&#xff1a; 修改 test 为 newTest g…...

JavaIO流

JavaIO流 一、概念二、File类三、File类的使用1、File文件/文件夹类的创建2、File类的获取操作3、File类判断操作 - boolean4、File类对文件/文件夹的增删改5、File类的获取子文件夹以及子文件的方法 四、Java中IO流多种维度的维度1、按照流向 - Java程序2、按照流的大小分类3、…...

FlinkSql 如何实现数据去重?

摘要 很多时候flink消费上游kafka的数据是有重复的&#xff0c;因此有时候我们想数据在落盘之前进行去重&#xff0c;这在实际开发中具有广泛的应用场景&#xff0c;此处不说详细代码&#xff0c;只粘贴相应的flinksql 代码 --********************************************…...

机器学习概念

目录 一、人工智能、机器学习、深度学习的关系 二、什么是深度学习&#xff1f; 2.1 深度学习常用算法 一、人工智能、机器学习、深度学习的关系 人工智能、机器学习和深度学习的关系如下所示。 二、什么是深度学习&#xff1f; 深度学习( DL, Deep Learning) 是机器学习 …...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...