0%

PHP8 函数及自定义函数:从基础到高级应用

函数是 PHP 中组织代码的基本单位,用于封装可重复使用的逻辑。PHP8 不仅提供了丰富的内置函数,还支持灵活的自定义函数,包括命名函数、匿名函数、箭头函数等。本文将详细介绍 PHP8 函数的特性、自定义函数的语法及高级用法。

函数的基本概念

函数是一段具有特定功能的代码块,通过函数名可以重复调用,避免代码冗余。PHP 函数具有以下特点:

  • 函数名不区分大小写,但通常使用小写字母
  • 函数可以接受参数,也可以返回值
  • 函数内部可以访问全局变量(需使用global关键字)
  • PHP8 引入了更多类型提示和特性

内置函数

PHP 提供了数千个内置函数,涵盖字符串处理、数组操作、文件操作等多个领域。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
// 字符串函数
$str = "hello world";
echo strlen($str); // 输出:11
echo strtoupper($str); // 输出:HELLO WORLD

// 数组函数
$arr = [3, 1, 2];
sort($arr);
print_r($arr); // 输出:Array ( [0] => 1 [1] => 2 [2] => 3 )

// 数学函数
echo max(3, 5, 2); // 输出:5
echo sqrt(16); // 输出:4
?>

自定义函数

1. 基本语法

自定义函数使用function关键字声明,基本结构如下:

阅读全文 »

PHP8 变量作用域:理解变量的可见范围

变量作用域指的是变量在代码中可访问的范围。在 PHP 中,变量的作用域决定了哪些部分的代码可以读取或修改该变量。理解作用域对于编写清晰、可维护的代码至关重要,能避免变量污染和意外修改的问题。

PHP 中的四种变量作用域

PHP 定义了四种基本的变量作用域,分别对应不同的使用场景:

作用域类型 定义位置 可访问范围 关键词
局部作用域 函数内部 仅在定义它的函数内部
全局作用域 函数外部 所有函数外部的代码 global
静态作用域 函数内部 仅在定义它的函数内部,但函数调用后不会销毁 static
超全局作用域 PHP 预定义 脚本的任何位置(函数内外均可) 无(预定义变量)

局部作用域(Local Scope)

函数内部定义的变量属于局部变量,只能在该函数内部访问,函数外部无法访问。

阅读全文 »

PHP8 循环语句:高效控制代码重复执行的核心语法

在编程中,循环语句用于重复执行一段代码(如遍历数组、处理批量数据、实现定时任务等),是减少冗余代码、提升开发效率的关键工具。PHP8 支持 4 种核心循环:forforeachwhiledo...while,每种循环适用于不同场景(如 foreach 专为数组 / 对象设计,for 适合固定次数循环)。本文将详细解析每种循环的语法、特性、适用场景及 PHP8 的增强点,结合实战示例帮助你灵活运用。

for 循环:固定次数的精确控制

for 循环是预先知道循环次数时的最佳选择(如遍历 1 到 100 的数字、处理固定长度的数组),语法结构清晰,支持精确控制循环的 “初始化、条件判断、步长更新”。

1. 基础语法

1
2
3
4
5
<?php
for (初始化表达式; 条件表达式; 更新表达式) {
// 循环体:条件为 true 时执行的代码
}
?>
  • 初始化表达式:循环开始前执行一次,通常用于定义循环变量(如 $i = 0);
  • 条件表达式:每次循环前判断,结果为 true 则执行循环体,false 则退出循环(如 $i < 10);
  • 更新表达式:每次循环体执行后执行,通常用于更新循环变量(如 $i++,每次加 1)。

2. 核心特性

  • 固定次数循环:通过条件表达式精确控制循环次数(如 $i < 5 表示循环 5 次);
  • 灵活的步长:更新表达式支持自定义步长(如 $i += 2 表示每次加 2,实现偶数遍历);
  • 循环变量可控:可在循环体内直接修改循环变量(如满足条件时强制 $i = 10 退出循环)。

3. 实战示例

示例 1:遍历 1 到 5 的数字(基础用法)
阅读全文 »

PHP8 条件语句:控制程序流程的核心逻辑

条件语句是编程中用于根据不同情况执行不同代码块的基础结构。PHP8 提供了丰富的条件控制语法,包括 if 语句、switch 语句,以及新增的 match 表达式,它们各自适用于不同的场景。本文将详细讲解这些条件语句的语法、特性、使用场景及最佳实践。

if 语句:最基础的条件判断

if 语句是最常用的条件判断结构,用于根据一个或多个条件的真假执行相应代码块。

1. 基础语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// 单条件判断
if (条件表达式) {
// 条件为 true 时执行的代码
}

// if...else 结构(二选一)
if (条件表达式) {
// 条件为 true 时执行
} else {
// 条件为 false 时执行
}

// if...elseif...else 结构(多条件分支)
if (条件1) {
// 条件1 为 true 时执行
} elseif (条件2) {
// 条件1 为 false 且条件2 为 true 时执行
} else {
// 所有条件都为 false 时执行
}
?>

2. 关键特性

  • 条件表达式:必须返回布尔值(truefalse),PHP 会自动将非布尔值转换为布尔值(如 0""null 转为 false,非零数值、非空字符串转为 true)。

  • 代码块简化:若代码块仅包含一条语句,可省略大括号{}(但建议始终保留,提升可读性):

    1
    2
    3
    4
    5
    <?php
    $score = 85;
    if ($score >= 60) echo "及格"; // 单行可省略大括号
    else echo "不及格";
    ?>
  • 多条件组合:可通过逻辑运算符(&&与、||或、!非)组合多个条件:

阅读全文 »

Elasticsearch 8.X 向量搜索核心字段解析:从原理到实战落地

随着人工智能与自然语言处理技术的成熟,向量搜索(Vector Search) 已成为突破传统关键词搜索局限、实现 “语义理解式检索” 的核心技术。Elasticsearch 作为主流的分布式搜索与分析引擎,在 8.X 版本中通过 semantic_textdense_vectorsparse_vector 三种专用字段类型,构建了完整的向量存储与查询能力。本文将从嵌入向量的基础概念出发,系统拆解三种字段的特性、适用场景、实操示例及选型逻辑,帮助开发者根据业务需求快速落地智能搜索。

基础认知:嵌入向量与 Elasticsearch 向量支持

在深入字段类型前,需先明确 “嵌入向量” 的核心价值 —— 它是连接非结构化数据(文本、图像等)与机器可计算语义的桥梁。

什么是嵌入向量(Embedding)?

嵌入向量是通过深度学习模型(如 OpenAI 的 text-embedding-ada-002、Hugging Face 的 all-MiniLM-L6-v2)将非结构化数据转化的 低维数值向量。其核心特性是:

  • 语义关联性:语义相似的数据,对应的向量在高维空间中距离更近(可通过余弦相似度、点积等计算);
  • 跨模态兼容:文本、图像、音频等不同类型数据,可通过对应模型转化为同维度向量,实现 “跨模态检索”(如用文本搜图像)。

例如,“轻便夏季背包” 和 “夏日便携双肩包” 的向量余弦相似度接近 1,而与 “冬季羽绒服” 的相似度接近 0—— 这让 Elasticsearch 能突破 “关键词匹配” 的局限,理解用户的 “语义意图”。

Elasticsearch 中的向量分类

Elasticsearch 支持的嵌入向量主要分为两类,对应不同的检索需求:

阅读全文 »