当前位置: 首页 > 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) 是机器学习 …...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...

轻量级Docker管理工具Docker Switchboard

简介 什么是 Docker Switchboard &#xff1f; Docker Switchboard 是一个轻量级的 Web 应用程序&#xff0c;用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器&#xff0c;使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...