php学习笔记(全面且适合新手)
以下是专为 PHP 7.4 初学者设计的全面学习文档,涵盖基础语法、细节语法和进阶语法,结合 PHP 7.4 新特性与实战案例,帮助系统掌握 PHP 开发:
为什么特地做7.4的笔记而不做8的?因为公司用的7.4,哈哈
一、基础语法:构建 PHP 编程基石
1. 变量与数据类型
- 变量声明:使用 $ 符号声明,无需提前指定类型。
$name = "John"; // 字符串
$age = 30; // 整数
$salary = 5000.5; // 浮点数
-
数据类型:标量(int, float, string, bool)、复合(array, object)、特殊(resource, NULL)。
-
类型强制转换:
$num = (int) "123"; // 转换为整数
$str = (string) 456; // 转换为字符串
2. 运算符与表达式
-
算术运算符:+, -, *, /, %。
-
比较运算符:==, ===, >, <, <=, >=。
-
逻辑运算符:&&, ||, !。
-
三元运算符:
$status = $isActive ? "Active" : "Inactive";
3. 流程控制
- 条件语句:
if ($age >= 18) {echo "成年人";
} elseif ($age >= 13) {echo "青少年";
} else {echo "儿童";
}
// for 循环
for ($i = 0; $i < 5; $i++) {echo $i;
}// while 循环
$j = 0;
while ($j < 5) {echo $j++;
}
4. 函数基础
- 自定义函数:
function add($a, $b) {return $a + $b;
}
echo add(3, 5); // 输出 8
$greet = function($name) {echo "Hello, $name!";
};
$greet("Alice"); // 输出 Hello, Alice!
二、细节语法:深入 PHP 7.4 特性
1. 类型声明(PHP 7.4 增强)
- 标量类型声明:
declare(strict_types=1); // 开启严格模式function multiply(int $a, int $b): int {return $a * $b;
}
echo multiply(3, "4"); // 严格模式下报错
- 联合类型(PHP 7.4 新增):
function formatValue(int|string $value): string {return "Value: " . $value;
}
echo formatValue(123); // 输出 Value: 123
2. 箭头函数(PHP 7.4 新增)
- 简洁语法:
$numbers = [1, 2, 3, 4];
$squared = array_map(fn($n) => $n ** 2, $numbers);
print_r($squared); // 输出 Array([0] => 1, [1] =>4, [2] =>9, [3] =>16)
- 自动捕获父作用域变量:
$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3]);
print_r($nums); // 输出 Array([0] =>10, [1] =>20, [2] =>30)
3. 类型属性(PHP 7.4 新增)
- 类属性类型声明:
class User {public int $id;public string $name;protected ?string $email = null;
}$user = new User();
$user->id = 1; // 合法
$user->name = "Bob"; // 合法
$user->email = "bob@example.com"; // 合法
$user->email = null; // 合法(允许 null)
4. 空合并运算符(??)与空合并赋值运算符(??=)
- 空值处理:
$username = $_GET['user'] ?? "Guest"; // 若 $_GET['user'] 不存在,默认 "Guest"
$this->data['comments'] ??= []; // 若 $this->data['comments'] 为 null,赋值为空数组
三、进阶语法:提升代码质量与效率
1. 面向对象编程(OOP)
- 类与对象:
class Car {public string $model;private int $year;public function __construct(string $model, int $year) {$this->model = $model;$this->year = $year;}public function getInfo(): string {return "{$this->model} ({$this->year})";}
}$car = new Car("Toyota", 2020);
echo $car->getInfo(); // 输出 Toyota (2020)
- 继承与多态:
class ElectricCar extends Car {public function charge(): void {echo "Charging...";}
}
2. 命名空间与自动加载
- 命名空间声明:
namespace App\Controllers;class HomeController {// 控制器逻辑
}
- 自动加载(Composer):
{"autoload": {"psr-4": {"App\\": "src/"}}
}
3. 异常处理
- 异常捕获与抛出:
try {if (!file_exists("data.txt")) {throw new Exception("文件不存在");}
} catch (Exception $e) {echo "错误:" . $e->getMessage();
}
4. 文件操作与安全性
- 文件读写:
// 读取文件
$content = file_get_contents("data.txt");// 写入文件
file_put_contents("log.txt", "日志信息\n", FILE_APPEND);
- 安全防护:
// 输入过滤
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);// 输出转义
echo htmlspecialchars($username);
5. 数据库操作(MySQLi 预处理语句)
- 连接数据库:
$mysqli = new mysqli("localhost", "user", "pass", "db");
if ($mysqli->connect_error) {die("连接失败:" . $mysqli->connect_error);
}
- 预处理语句:
$stmt = $mysqli->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email);
$name = "Alice";
$email = "alice@example.com";
$stmt->execute();
四、PHP 7.4 新特性深度解析
1. 箭头函数的应用场景
- 数组处理:
$users = [["name" => "John", "age" => 30],["name" => "Jane", "age" => 25]
];$names = array_map(fn($user) => $user['name'], $users);
print_r($names); // 输出 Array([0] => John, [1] => Jane)
2. 类型属性的注意事项
- 默认值设置:
class Product {public float $price = 0.0; // 非空类型需设置默认值public ?string $description = null; // 允许 null
}
3. 协变返回与逆变参数(PHP 7.4 新增)
- 协变返回:
interface Animal {public function makeSound(): string;
}class Dog implements Animal {public function makeSound(): string {return "Woof!";}
}class Cat implements Animal {public function makeSound(): string {return "Meow!";}
}function getAnimal(): Animal {return new Dog(); // 协变返回更具体的类型
}
五、学习资源推荐
-
官方文档:PHP 官方手册
-
在线教程:PHP 中文网、W3Schools
-
书籍:《PHP 和 MySQL Web 开发》、《PHP: The Right Way》
-
实战项目:GitHub PHP 项目
六、学习路线建议
-
阶段一(基础):掌握变量、运算符、流程控制、函数。
-
阶段二(进阶):学习面向对象、命名空间、异常处理。
-
阶段三(实战):结合数据库操作、文件处理、安全性开发完整项目。
-
阶段四(优化):深入 PHP 7.4 新特性,提升代码效率与可维护性。
相关文章:
php学习笔记(全面且适合新手)
以下是专为 PHP 7.4 初学者设计的全面学习文档,涵盖基础语法、细节语法和进阶语法,结合 PHP 7.4 新特性与实战案例,帮助系统掌握 PHP 开发: 为什么特地做7.4的笔记而不做8的?因为公司用的7.4,哈哈 一、基…...
Nginx核心功能
目录 一:基于授权的访问控制 1:基于授权的访问控制简介 2:基于授权的访问控制步骤 (1)使用htpasswd 生成用户认证文件 (2)修改密码文件权限为400,将所有者改为nginx,…...
基于Spring Boot 电商书城平台系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
流量控制机制
基于信用(credit-based)的流量控制机制 在基于信用的流量控制中,每个下游路由器都维护了一个信用计数器,用于跟踪其可用的缓冲空间。当一个数据包(或者说flit)被成功接收后,下游路由器会向上游…...
ImageDataGenerator ()用法简介
ImageDataGenerator 是 Keras 中用于图像数据增强和预处理的工具。它允许你实时生成增强的图像数据,这在训练深度学习模型时特别有用,因为它可以帮助提高模型的泛化能力。 以下是 ImageDataGenerator 的一些常见用法和参数: 基本用法 导入模块 from keras.preprocessi…...
【Linux】服务自启动设置的方式
关于服务自启动设置的方式,本文将介绍两种方法。分别是systemd服务单元文件的配置和起容器的方式。 目录 1 systemd服务单元文件的配置 [Unit] 部分 [Service] 部分 [Install] 部分 2 docker 1 systemd...
Wi-SUN与LoRa和NB-IoT通信技术的对比
LoRa和NB-IoT也都是LPWAN(低功耗广域网)的一种,不同的是他们分处在不同的频段。分为授权频段和非授权频段。(NB-IoT)其采用现有的3G、4G网络,需要通过电信运营商申请才可以使用。使用非授权频段的技术主要为…...
科研入门规划
作为研0学生,建议采取 “边打基础边探索,逐步深入” 的策略。 📌 阶段一:先建立基础框架(前1-3个月) 1. 快速搭建知识框架 目标:了解领域全貌,明…...
《P3143 [USACO16OPEN] Diamond Collector S》
题目描述 奶牛 Bessie 一直喜欢闪闪发光的物体,她最近在业余时间开始了一项爱好——挖掘钻石!她收集了 N 颗大小各不相同的钻石(N≤50,000),并希望将它们中的一部分放在谷仓里的两个展示柜中展示。 由于 Bessie 希望…...
纯C协程框架NtyCo
原文是由写的,写的真的很好,原文链接:纯c协程框架NtyCo实现与原理-CSDN博客 1.为什么会有协程,协程解决了什么问题? 网络IO优化 在CS,BS的开发模式下,服务器的吞吐量是一个受关注的参数&#x…...
16、路由守卫:设置魔法结界——React 19 React Router
一、魔法结界的本质 "路由守卫是霍格沃茨城堡的隐身斗篷,在时空裂隙中精准控制维度跃迁!" 魔法部交通司官员挥舞魔杖,React Router 的嵌套路由在空中交织成星轨矩阵。 ——基于《国际魔法联合会》第7号时空协议,路由守…...
try catch + throw
异常 java语言中将,将程序执行中发生的不正常情况称为“异常”。(1)Error;JVM系统内部错误,资源耗尽严重。(2)Execption:运行时异常,编译时异常。 异常体系图 异常处理…...
【东枫电子】AI-RAN:利用人工智能驱动的计算基础设施变革 RAN
太原市东枫电子科技有限公司,翻译 文章目录 摘要一、引言二、AI-RAN 的用例三、AI-RAN 的需求与赋能因素四、参考架构设计五、AI-RAN 概念验证六、结论与未来工作REFERENCES 摘要 无线接入网络 (RAN) 格局正在经历从传统的以通信为中心的基础设施向融合计算通信平台…...
【Linux】第十四章 提高命令行效率
1. #!/bin/bash 是什么意思? #!/bin/bash 出现在 shell 脚本第一行的开头,意味着使用bash shell 命令解释器来执行脚本。 2. PATH变量有什么重要作用? PATH 的作用是告诉操作系统在哪些目录下寻找需要运行命令程序,从而不需要输…...
Lucene中不同搜索类型的使用方法、基本概念、应用场景、差异对比,并通过表格进行总结
为了详细说明Lucene中不同搜索类型的使用方法、差异对比,并通过表格进行总结,我们首先需要理解每种搜索类型的基本概念和应用场景。以下是针对每种搜索类型的简要说明、差异对比以及最终的表格总结。 1. 多字段搜索(MultiFieldQueryParser&am…...
【自然语言处理与大模型】LangChain大模型应用框架入门①
单独为LangChain花大概五篇文章的内容,来和大家一起入门LangChain,这是第一篇重点放在,了解 LangChain 是什么、它的主要用途以及核心模块。了解 LangChain 的设计哲学:链式调用、模块化、可扩展性。安装并学习其中的一个组件&…...
OpenJDK 1.8中-Xloggc参数下GC日志覆盖与追加模式深度解析
#作者:邓伟 文章目录 一、引言二、覆盖模式详解2.1 默认覆盖行为2.2 覆盖模式的适用场景 三、追加模式(日志轮换)深度解析3.1 追加模式的实现:日志轮换配置3.2 日志轮换的底层逻辑3.3 追加模式(日志轮换)适…...
【Java面试笔记:进阶】28.谈谈你的GC调优思路?
在JVM的GC调优中,没有放之四海而皆准的方案,需要结合业务场景、硬件资源和GC特性进行系统性分析。 1.GC调优的基本思路 1.明确调优目标 内存效率(Footprint):减少JVM的内存占用(如边缘设备部署)。低延迟(Latency):降低GC导致的停顿时间(如API网关要求99.9%请求延迟…...
C#中winform窗体如何捕获键盘按键事件
马工撰写的年入30万+C#上位机项目实战必备教程(点击下方链接即可访问文章目录) 1、《C#串口通信从入门到精通》 2、《C#与PLC通信从入门到精通 》 3、《C# Modbus通信从入门到精通》 4、《C#Socket通信从入门到精通 》 5、《C# MES通信从入门到精通》 6、《winform控件从入门…...
USB 网卡——RNDIS 控制消息流程
文章目录 RNDIS 控制消息流程控制写设备回复控制读注意事项RNDIS 控制消息流程 RNDIS 控制消息流程分为三步 控制写(控制端点 0)设备回复(中断端点)控制读(控制端点 0)数据抓包如下 控制写 设备的控制通道是通过 USB 控制端点完成的。 从主机到设备的控制消息作为 SE…...
【AI News | 20250429】每日AI进展
AI Repos 1、aci ACI.dev是一个开源基础设施层,旨在为AI智能体的工具使用提供支持。它通过统一的模型-上下文-协议(MCP)服务器或轻量级Python SDK,使智能体能够以感知意图的方式访问600多种工具,并具备多租户认证、细…...
JavaScript 中深拷贝浅拷贝的区别?如何实现一个深拷贝?
一、区别:像“复印文件” vs “创建副本文件” 1. 浅拷贝(Shallow Copy) 动作:只复制文件的第一页,其他页用“贴标签”指向原文件。结果: 修改第一层属性不影响原对象,但修改嵌套对象会同时改…...
<四级词汇>2025.4.29
compact---所有的人都拍他 越拍越紧 ---紧凑的 impact 往里拍他 -- 碰撞会产生影响 --- 碰撞 影响 influence -- 影响 flue -- 流感 influenza -- 流感 fluent --- fly enter 鸟儿流利飞进屋子 --- 流利的 fluently affluent --- 一再地生活的很流畅 -- 富裕的 …...
mmap核心原理和用途及其与内存映射段的关系
mmap 是 Linux/Unix 系统中的一个关键系统调用,全称是 Memory Map(内存映射)。它的核心功能是将 文件、设备或匿名内存 直接映射到进程的虚拟地址空间,从而实现高效的内存访问和操作。以下是其核心原理和用途的详细说明࿱…...
深入理解 Web Service:原理、组件与核心技术详解
目录 前言1 Web Service 概述2 Web Service 的三大核心角色2.1 服务提供者(Service Provider)2.2 服务请求者(Service Consumer)2.3 服务注册中心(Service Registry) 3 Web Service 核心技术详解3.1 WSDL&a…...
【动态导通电阻】GaN功率器件中动态导通电阻退化的机制、表征及建模方法
2019年,浙江大学的Shu Yang等人在《IEEE Journal of Emerging and Selected Topics in Power Electronics》上发表了一篇关于GaN(氮化镓)功率器件动态导通电阻(Dynamic On-Resistance, RON)的研究论文。该文深入探讨了GaN功率器件中动态导通电阻退化的机制、表征方法、建模…...
AWS SQS 队列策略配置指南:常见错误与解决方案
在 AWS 云服务中,Simple Queue Service (SQS) 是一种完全托管的消息队列服务,广泛应用于分布式系统组件间的解耦。为了确保队列的安全访问,正确配置队列策略至关重要。本文将详细介绍 SQS 队列策略的配置方法,常见错误及其解决方案。 SQS 队列策略基础 SQS 队列策略是基于…...
【后端】【Docker】 Docker 动态代理 取消代理完整脚本合集(Ubuntu)
🚀 Docker 动态代理 & 取消代理完整脚本合集(Ubuntu) 一、动态设置 Docker 代理脚本 支持自定义输入代理地址和端口! 📄 脚本内容(保存为 set_docker_proxy.sh) #!/bin/bash# 读取用户输入 read -p "请输入…...
Java基础学习内容大纲
Java基础学习内容大纲 第一阶段:建立编程思想 Java概述:如何快速学习Java技术、Java历史、Java特点、Sublime、Java运行机制、JDK、转义字符、Java开发规范、Java API 变量:数据类型、变量基本使用、数据类型转换 运算符:运算符介绍、算数运算符、关系运算符、…...
[USACO08DEC] Hay For Sale S Java
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int c sc.nextInt(); // 背包容量int h sc.nextInt(); // 物品数量int[] v new int[h 1];for (int i 1; i < h; i) v[i] sc.nextInt();int[] dp …...
碰到的 MRCPv2 串线以及解决思路
最近碰到了一个朋友的 MRCPv2 串线,表现大约是: fs1 和 fs2 同时发到 mrcp server 的同一个 rtp 端口 目前尚不清楚 mrcp server 是否能避免这种情况(其实是有思路的,接收到 rtp 包时检查网络地址和网络端口跟 sip 协商的是否一…...
AI正当时,国内AI HR领先厂商易路如何从“单点突破”到“全面融合”
所谓AI HR,是指将人工智能(AI)技术(如机器学习、自然语言处理、大数据分析等)应用于人力资源管理的各个环节,以提升效率、优化决策并改善员工体验。典型场景有: 在招聘、考勤、薪酬计算等重复…...
MCP 哪家强?深度分析 Cline、Cursor、Trae、Coze 四大平台
想象一下:你只需一句话,AI就能自动抓取GitHub issue、生成代码、调试UI,甚至帮你写博客发到Substack!这不是科幻,而是**Model Context Protocol (MCP)**的现实。MCP作为AI与工具交互的“通用语言”,自2024年…...
【最新 MCP 战神手册 09】利用资源和提示增强上下文
文章目录 1. 开始啦!2. 第一部分:通过资源解锁应用数据3. 第二部分:用提示引导 AI4. 第三部分:高效上下文管理策略1. 开始啦! 在上一章中,我们深入探讨了 MCP 工具——这些组件使得 AI 模型能够执行各种操作。然而,操作很少在真空中发生。为了让 AI 智能地行动,它需要…...
解决vue3 路由query传参刷新后数据丢失的问题
前言:在页面刷新的时候,路由query数据会被清空,网上很多方法说query传参可以实现,反正我是没有实现 思路:将数据保存到本地,通过 “ ?” 进行判断是否有数据,页面销毁的时候删除本地…...
VUE篇之树形特殊篇
根节点是level:1, level3及其子节点有关联,但是和level2和他下面的子节点没有关联 思路:采用守护风琴效果,遍历出level1和level2级节点,后面level3的节点,采用树形结构进行关联 <template><div :class"…...
Qwen多模态系列论文
From:https://www.big-yellow-j.top/posts/2025/04/28/QwenVL.html 本文主要介绍Qwen-vl系列模型包括:Qwen2-vl、Qwen2.5-vl Qwen2-vl http://arxiv.org/abs/2409.12191 模型结构: Qwen2-vl主要的改进点在于:1、使用动态分辨率(…...
Astro大屏中关于数据流转的数据接入与数据中心之间的逻辑关系梳理
在 Astro 大屏中,「数据接入」与「数据中心」是紧密关联的一对模块,分别承担“数据从哪来”和“数据怎么管”的职责。为了更形象地帮助初学者理解,我可以用“自来水系统”的比喻来解释整个原理与操作逻辑: 🏠 形象比喻…...
【今日三题】小红的ABC(找规律) / 不相邻取数(多状态dp) / 空调遥控(排序+二分/滑动窗口)
⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 小红的ABC(找规律)不相邻取数(多状态dp)空调遥控(排序二分/滑动窗口) 小红的ABC(找规律) 小红的ABC 找最短回文串ÿ…...
双重差分模型学习笔记(理论)
【DID最全总结】90分钟带你速通双重差分!_哔哩哔哩_bilibili 一、DID的基本原理 (一) 单重差分 1. Cross-Section Comparison 截面数据 只有某个时间点事件发生后的数据 D1 事件发生后 D0 事件发生前 2. Befor-After Vomparison 时间序列…...
企业级私有化部署,内部聊天软件
如何在激烈的市场竞争中脱颖而出,提升工作效率、降低运营成本,同时保障信息安全,成为众多企业管理者亟待解决的问题。而BeeWorks 企业级私有化部署的内部聊天软件,无疑是为这一难题提供了一把金钥匙。 BeeWorks覆盖即时通讯&#…...
HCIA-Datacom 高阶:VLAN、VLANIF 与静态路由综合实验
拓扑图解读 从拓扑图中可以看到,存在三层交换机 LSW3、普通交换机 LSW4、路由器 R2 以及 PC1 - PC4。LSW4 连接了三个不同 VLAN 的 PC(PC1 属于 VLAN 10、PC2 属于 VLAN 20、PC3 属于 VLAN 30 ),并通过 Ethernet 0/0/1 端口以 tr…...
Android ndk 编译opencv后部分接口std::__ndk1与项目std::__1不匹配
1、opencv-4.11预编译命令(在opencv4.5.0之后兼容免费features2d做特征匹配),NDK版本选用的android-ndk-r23c-linux.zip cmake -G Ninja \ -DCMAKE_TOOLCHAIN_FILE/home/who/Downloads/NDK/android-ndk-r23c/build/cmake/android.toolchain.…...
SQL命令一:SQL 基础操作与建表约束
目录 引言 一、SQL 基础命令 (一)数据库相关操作 (二)表格相关操作 (三)MySQL 常用数据类型 二、增删改查(CRUD)操作 (一)增加数据 (二&a…...
颜色分类,不靠“调色盘”:双指针 VS 计数排序的正面PK
颜色分类,不靠“调色盘”:双指针 VS 计数排序的正面PK 在算法圈混得久了,总有一些题目是面试官的心头好,刷题人绕不过的“鬼门关”。“颜色分类”(LeetCode 75)就是其中之一,看似小儿科…...
Shopify网上商店GraphQL Admin接口查询实战
目录 一、Shopify网上商店 二、个人商店配置接口权限 三、PostMan调用接口测试 四、通过Java服务调用接口 一、Shopify网上商店 Shopify是由Tobi Ltke创办的加拿大电子商务软件开发商,总部位于加拿大首都渥太华,已从一家在咖啡店办公的 5人团队&…...
Laravel基础
Laravel 基础 01.Laravel入门和安装 Composer安装Laravel步骤 要使用 Composer 安装 Laravel,请按照以下步骤操作: 确保已经安装了 Composer。如果还没有安装,请访问 https://getcomposer.org/download/ 下载并安装。 打开命令行或终端。…...
【Leetcode 每日一题 - 补卡】2302. 统计得分小于 K 的子数组数目
问题背景 一个数组的 分数 定义为数组之和 乘以 数组的长度。 比方说, [ 1 , 2 , 3 , 4 , 5 ] [1, 2, 3, 4, 5] [1,2,3,4,5] 的分数为 ( 1 2 3 4 5 ) 5 75 (1 2 3 4 5) \times 5 75 (12345)575。 给你一个正整数数组 n u m s nums nums 和一个整数 k…...
力扣——206.反转链表倒序输出链表
206. 反转链表 - 力扣(LeetCode) 思路(迭代) 设三个指针,前后两个指针都为空,当前指针为输入的头指针 开始循环——判断条件为当前节点不为空 先给下一个节点赋值为——当前节点的下一个 改变当前节点的…...
Arthas在Java程序监控和分析中的应用
Arthas在Java程序监控和分析中的应用 在互联网大厂Java求职者的面试中,经常会被问到关于使用Arthas来监控和分析Java程序的相关问题。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官:马架构,欢迎来到我们公司的面…...