PHP 7.1之后必学技能:可为空数组的5种高阶用法(稀缺技术揭秘)

第一章:PHP 7.1可为空数组类型概述

从 PHP 7.1 开始,语言引入了对可为空的标量类型的初步支持,并增强了类型系统的灵活性。其中一项关键改进是允许函数参数和返回值类型声明中使用可为空的类型语法,包括数组类型。这意味着开发者可以明确指定一个参数或返回值可以是数组,也可以是 null。

可为空类型的语法结构

在 PHP 7.1 中,通过在类型前添加问号 ? 来表示该类型可以为 null。对于数组类型,语法如下:
function processItems(?array $items): ?array {
    if ($items === null) {
        return null;
    }
    // 处理数组元素
    return array_map('strtoupper', $items);
}
上述代码中,?array 表示参数 $items 可以是一个数组或 null,返回值同样允许为 null。这提升了函数接口的表达能力,使调用方能更清晰地理解可能的输入输出情况。

使用场景与优势

  • 提高代码健壮性:避免因未处理 null 值而导致的运行时错误
  • 增强类型提示:IDE 和静态分析工具能更准确地进行推断和提示
  • 简化条件判断:结合联合类型思想,减少额外的空值检查逻辑
类型写法含义
array必须为数组,传入 null 将触发 TypeError
?array可以是数组或 null
该特性要求开发者在定义函数时更加严谨地思考数据契约,尤其在构建公共 API 或复杂业务逻辑时尤为重要。同时需注意,此语法不适用于类属性的类型声明(该功能在 PHP 7.4 中才被引入)。

第二章:可为空数组的声明与类型约束

2.1 理解 ?array 语法及其底层机制

在现代 PHP 类型系统中,`?array` 是一种联合类型语法,表示参数或返回值可以是数组(array)或 null。该语法自 PHP 7.1 起引入,用于显式支持可空类型。
语法结构解析
function processData(?array $data): ?array {
    return $data !== null ? array_map('trim', $data) : null;
}
上述函数接受一个可为空的数组参数,并返回处理后的数组或 null。`?array` 等价于 `array|null`,由引擎在编译期进行类型约束检查。
底层实现机制
PHP 在 Zend 引擎层面通过类型信息(zend_type)标记变量的允许类型集合。当声明 `?array` 时,对应类型标志包含 IS_ARRAY 和 IS_NULL,调用时会触发类型验证钩子,若传入非数组且非 null 的值,则抛出 TypeError。
  • ?array 显式表达可空性,提升代码可读性
  • 避免运行时隐式转换导致的逻辑错误
  • 与严格模式(declare(strict_types=1))协同工作更安全

2.2 在函数参数中安全使用可为空数组

在现代编程实践中,函数参数常涉及可为空的数组类型。若处理不当,易引发空指针异常或未定义行为。
常见风险场景
当函数接收可能为 null 的数组时,直接访问其长度或元素将导致运行时错误。尤其在动态语言或弱类型上下文中更需警惕。
防御性编程策略
优先采用默认值机制,确保数组始终有效:
func processItems(items []string) {
    if items == nil {
        items = []string{} // 初始化为空切片
    }
    for _, item := range items {
        // 安全遍历
    }
}
该代码通过判断 items == nil 来规避空引用问题,Go 语言中 []string{} 是合法的空切片,支持安全迭代。
  • 始终校验输入参数是否为 null
  • 优先使用语言内置的零值机制
  • 避免将 nil 传递给期望数组的下游函数

2.3 返回值类型声明中的 ?array 实践

在 PHP 7.1 及以上版本中,可为空的返回值类型通过前置问号 ? 表示。使用 ?array 作为返回类型,意味着函数可以返回一个数组或 null。
语法与基本用法
function getUsers(): ?array {
    if (/* 数据存在 */) {
        return ['Alice', 'Bob'];
    }
    return null;
}
上述代码中,?array 明确表示该函数可能返回数组或 null。若省略 ?,当返回 null 时将抛出 TypeError。
最佳实践建议
  • 当结果可能“无数据”而非空集合时,优先使用 ?array
  • 若应始终返回数组(包括空数组),则使用 array 更安全
  • 结合严格类型检查(declare(strict_types=1);)提升可靠性

2.4 结合严格模式避免空数组类型错误

在 TypeScript 开发中,启用严格模式("strict": true)能有效防止常见类型隐患,尤其是对空数组的误用。默认情况下,TypeScript 可能将空数组推断为 any[],导致运行时类型错误。
严格模式下的类型推断
当开启严格模式时,编译器会强化类型检查,要求显式声明或上下文可推导的类型。例如:
const numbers: number[] = [];
此声明明确指定数组元素必须为数字类型,即使初始为空,后续添加非数字值也会触发编译错误。
常见问题与解决方案
  • 未指定类型导致 any[] 推断 —— 显式标注数组类型
  • 函数返回空数组且无返回类型注解 —— 添加返回类型如 number[]
  • 条件分支可能返回空数组 —— 确保所有路径类型一致
通过结合接口和泛型,可进一步增强类型安全性:
function filterItems<T>(arr: T[], predicate: (item: T) => boolean): T[] {
  return arr.filter(predicate);
}
该函数在严格模式下确保输入与输出类型一致,即使返回空数组也能保持类型安全。

2.5 类属性中初始化可为空数组的最佳方式

在面向对象编程中,类属性的初始化需兼顾安全性与灵活性。当属性为数组类型且可能为空时,推荐在构造函数中显式初始化为 [],避免引用共享问题。
常见错误示例
class DataCollector:
    items = []  # 错误:类变量共享
该写法导致所有实例共享同一数组,修改一处会影响全局。
正确初始化方式
  • 在 __init__ 中初始化实例属性
  • 确保每个实例拥有独立数组
class DataCollector:
    def __init__(self):
        self.items = []  # 正确:实例独有
此方式保证了数据隔离,适用于动态增删元素的场景。

第三章:结合联合类型的进阶应用场景

3.1 使用 ?array 与其它标量类型的联合判断

在PHP的类型系统中,?array 表示一个可为 null 的数组类型。当与其他标量类型(如 int、string、bool)进行联合类型判断时,需明确处理 null 值和类型兼容性。
联合类型的基本语法
function processValue(?array $data, string|int $id): bool {
    if ($data === null) {
        return false;
    }
    return isset($data[$id]);
}
该函数接受一个可为空的数组和一个字符串或整数类型的 ID。首先判断数组是否为 null,再检查指定键是否存在。
类型判断优先级
  • null 值必须优先处理,避免触发类型错误
  • 使用 is_array() 进一步验证非 null 变量是否真为数组
  • 联合类型中,PHP 会按声明顺序尝试匹配

3.2 泛型思维下的可为空数组设计模式

在现代类型系统中,泛型与空安全机制的结合为集合类型的设计提供了更强的表达能力。可为空数组作为常见边界场景,需在编译期明确其状态语义。
泛型数组的空安全建模
通过引入可空性注解与泛型约束,可在类型层面区分“空数组”与“null引用”。例如,在Kotlin中:

fun <T> processList(data: List<T>?) {
    if (data.isNullOrEmpty()) {
        println("列表为空或未初始化")
        return
    }
    println("处理 ${data.size} 项数据")
}
该函数接受一个可为空的泛型列表,利用 isNullOrEmpty() 统一处理 null 与空集合,避免多层判空逻辑。
设计优势对比
方案空值处理泛型兼容性
原始数组易引发 NullPointerException弱
可为空泛型数组编译期显式声明强

3.3 避免常见类型冲突与运行时异常

在强类型语言中,类型不匹配是引发运行时异常的主要原因之一。尤其是在接口数据解析、泛型使用和跨模块调用时,必须显式处理类型转换。
类型断言的安全实践
使用类型断言时应配合类型检查,避免直接强制转换。

if val, ok := data.(string); ok {
    fmt.Println("字符串值:", val)
} else {
    log.Fatal("类型不匹配:期望 string")
}
上述代码通过逗号-ok模式判断类型归属,防止 panic。data 必须为 interface{} 类型,ok 返回布尔值表示断言是否成功。
常见类型映射对照表
JSON 类型Go 对应类型风险操作
numberfloat64直接转 int 可能溢出
array[]interface{}索引越界
booleanbool字符串比较误判

第四章:实际开发中的高阶用法案例

4.1 构建容错性配置系统:支持 null 或 array 输入

在现代分布式系统中,配置服务必须具备高容错性。尤其当客户端传入 `null` 或空数组时,系统应能优雅处理而非抛出异常。
输入校验与默认值兜底
为确保稳定性,所有配置解析逻辑需前置判空处理。例如,在 Go 中可采用如下模式:

func ParseConfig(inputs []*ConfigItem) []*ConfigItem {
    if inputs == nil {
        return make([]*ConfigItem, 0) // 返回空切片而非 nil
    }
    return inputs
}
该函数接受可能为 `nil` 的指针数组,返回始终为有效切片,避免调用方二次判空。
常见输入场景对比
输入类型是否合法推荐处理方式
null是转换为空集合
空数组是直接透传
含无效项的数组部分合法过滤并记录警告

4.2 API响应处理中优雅地解析可选数组字段

在处理第三方API响应时,可选数组字段常为空值或完全缺失,直接访问易引发运行时异常。为提升健壮性,应采用安全解析策略。
常见问题场景
API可能返回:null、空数组[]或根本不包含该字段。若未做判空处理,将导致解析失败。
Go语言中的安全解析示例

type Response struct {
    Items []string `json:"items,omitempty"`
}

// 解析时确保字段安全
if resp.Items == nil {
    resp.Items = []string{} // 初始化为空数组
}
上述代码通过判断字段是否为nil,将其统一归一化为空数组,避免后续遍历出错。
处理策略对比
策略优点适用场景
默认初始化逻辑一致,减少判空高频访问字段
运行时检查内存节省低频或大对象字段

4.3 数据库查询结果封装中的空集与null统一管理

在数据库操作中,查询结果的封装常面临空集(empty)与 null 的语义歧义问题。两者均表示“无数据”,但在调用端处理方式不同,易引发空指针异常。
常见问题场景
当 DAO 层返回 nil 时,上层需频繁判空;而返回空切片则可直接遍历,降低调用复杂度。
统一返回策略
推荐始终返回空集合而非 nil,确保接口一致性:

func QueryUsers() ([]*User, error) {
    var users []*User
    // 查询逻辑...
    if err != nil {
        return nil, err
    }
    return users, nil // 即使无数据也返回空切片
}
上述代码中,即便查询结果为空,users 仍为长度为 0 的切片,调用方无需判断是否为 nil,可直接 range 遍历,提升代码健壮性与可读性。

4.4 表单验证逻辑中对可选数组字段的类型校验

在构建健壮的表单验证机制时,处理可选数组字段的类型校验尤为关键。这类字段可能为空,也可能包含特定结构的数组数据,需兼顾存在性与内部元素的合法性。
常见校验策略
  • 先判断字段是否存在且不为 null
  • 确认字段值是否为数组类型
  • 遍历数组项,逐个校验其数据类型和结构
代码示例
function validateOptionalArray(data) {
  if (data.items !== undefined && data.items !== null) {
    if (!Array.isArray(data.items)) {
      return { valid: false, error: 'items must be an array' };
    }
    for (let item of data.items) {
      if (typeof item !== 'string') {
        return { valid: false, error: 'each item must be a string' };
      }
    }
  }
  return { valid: true };
}
该函数首先检查 items 字段是否提供,再验证其是否为数组,最后确保每个元素为字符串类型,符合预期数据契约。

第五章:未来PHP版本兼容性与演进趋势

随着 PHP 8.x 系列的持续迭代,语言在性能、类型系统和错误处理方面不断进化。开发者在维护遗留项目的同时,必须关注未来版本的兼容性策略。
向后兼容的挑战
PHP 社区致力于保持向后兼容,但重大更新仍可能引入破坏性变更。例如,PHP 8.0 移除了 create_function() 和 mcrypt 扩展,导致依赖这些特性的旧应用无法直接升级。
  • 使用静态分析工具如 PHPStan 检测潜在兼容问题
  • 通过 Composer 的平台配置约束运行环境
  • 在 CI/CD 流程中集成多版本测试
类型系统的强化趋势
PHP 正逐步迈向更严格的类型安全。PHP 8.1 引入了枚举和只读属性,8.2 支持 readonly 类,8.3 增加了受感染的类型(sensitive parameters)。以下代码展示了现代类型用法:
// PHP 8.3 中的敏感参数示例
function login(string $username, #[\SensitiveParameter] string $password): bool {
    // 密码不会出现在错误回溯中
    return authenticate($username, $password);
}
长期支持版本规划
PHP 版本发布日期安全支持截止建议迁移时间
PHP 8.12021-112025-012024 年内完成
PHP 8.22022-122026-012024-2025
PHP 8.32023-112027-11推荐新项目使用
JIT 的实际应用场景
尽管 PHP 的 JIT 在标量计算场景中表现优异,但在典型 Web 请求中收益有限。建议在数学密集型服务(如数据编码、图像处理)中启用 OPcache + JIT 配置:
opcache.jit=1235
opcache.jit_buffer_size=256M
PHP 零基础超详细入门教程(新手友好版) 这篇教程从零开始、循序渐进、全是干货,适合完全没接触过 PHP、甚至刚接触编程的同学,跟着学就能独立写出网站代码。 阅读详情

相关推荐

状态估计【卡尔曼滤波kalman】UKF、EKF、粒子滤波PF学习与研究(Matlab代码实现)

内容概要:本文围绕非线性状态估计中的三种经典滤波算法——无迹卡尔曼滤波(UKF)、扩展卡尔曼滤波(EKF)和粒子滤波(PF)展开系统性学习与研究,重点在于通过Matlab编程实现这些算法的核心流程,并将其应用于实际系统的状态估计问题中。文档不仅详细阐述了各算法的数学原理、适用条件与性能差异,还提供了完整的仿真代码与案例分析,帮助读者深入理解其在非线性、非高斯环境下的表现特性。同时,资源拓展至EKF与神经网络融合训练、多源数据融合等高级应用场景,展现了其在智能控制、无人机导航、电力系统状态估计、目标跟踪等领域的广泛应用价值。; 适合人群:具备一定信号处理、控制理论或状态估计基础的研究生、科研人员及工程技术人员,尤其适用于从事自动化、机器人、导航、电力电子与智能系统等相关方向的研究与开发工作者;; 使用场景及目标:① 掌握UKF、EKF与PF在非线性系统中的建模思路与Matlab实现方法,理解其优缺点与适用边界;② 提升科研仿真能力,能够独立构建状态估计模型并进行算法对比验证;③ 将所学方法应用于如电池SOC估算、无人机姿态估计、传感器融合、故障诊断等实际工程问题中;; 阅读建议:建议结合Matlab动手实践,逐行解读并调试所提供的代码,深入理解算法实现细节;同时可延伸学习文中提及的数据融合、神经网络与滤波器结合等进阶主题,以构建完整的状态估计技术知识体系。

【PHP开发900个实用技巧】607.PHP超神进化:解构赋值的魔法力量,代码瞬间清爽!

PHP解构赋值是PHP7.1引入的强大特性,旨在简化数组和关联数组的赋值操作,减少代码冗余,提升可读性和效率。以下是其核心要点: 1. **基础解构**:用方括号语法替代传统的`list()`函数,例如`[$a, $b] = [1, 2];`,支持跳过元素和捕获剩余项,如`[$first, , $third, ...$rest] = [1, 2, 3, 4, 5];`。 2. **数组解构进阶**:在循环中使用解构,例如`foreach ($users as [$id, $name]) { ... }`

1078

PCIe网卡驱动实现分析(三)--- cache一致性

在现代处理器系统中,CPU的主频远高于主存读写速度,主存的读写速度成为程序执行效率的瓶颈;为了解决这个问题,在CPU和主存之间引入了Cache存储器,基于程序执行的局部性原理,在程序执行时,将正在使用的数据从主存拷贝一份到Cache,这样CPU就可以直接从Cache读写数据以改善主存读写速度慢的问题;

a935854743的博客 1776

Rainbond 内置 etcd 集群引导实战指南:静态配置、Discovery 服务与 DNS SRV 三种建群方式详解

本指南基于仓库内 vendored 的 etcd 官方文档([third_party/coreos-etcd/Documentation/op-guide/clustering.md](https://link.gitcode.com/i/2f5a10a20aa66a6e3e77f4f8b0e4c397))编写,系统讲解 etcd 集群从零引导的三种机制:**静态配置(Static)**、**et

gitblog_00222的博客 221

如何在windows电脑上搭建Linux环境(手把手教安装虚拟机软件和使用云服务器)

手把手教学如何搭建Linux环境

纪宁的博客 1万+

抖音Web端私信Protobuf逆向解析实战

本文详细解析了抖音Web端私信通信的逆向过程,发现其核心采用WebSocket传输Protobuf序列化数据。通过抓包获取二进制样本,利用protoc工具进行原始解码,并逐步推导和编写出对应的.proto协议定义文件,最终实现模拟消息的编码与解码,为理解私有协议逆向提供了完整实战案例。

water的专栏 761

PHP开发者必学:Docker Compose搭建LEMP开发环境

Docker Compose 是现代 PHP 工程化的核心编排工具,它通过声明式 YAML 文件实现多容器服务(Nginx、PHP-FPM、MySQL、Redis)的协同启动与网络互通,从根本上解决传统 PHP 开发中环境不一致、配置难复现、跨平台适配差等痛点。其原理基于用户定义桥接网络与命名卷机制,保障服务间可靠 DNS 解析与数据持久化;技术价值体现在环境初始化时间从数小时压缩至分钟级、CI/CD 构建失败率显著下降,并支撑 Laravel 等框架所需的多组件依赖(.env、队列、缓存、迁移)稳定运行。

weixin_31364787的博客 277

通信算法之281:大疆DJI无人机ID-DJI DroneID开源工程-相关问题-协议信息问题

ZC序列的参数未知。但是,使用第一个或第二个零相关序列对每个OFDM符号进行相位调整,对于直接相邻于使用过的零相关序列的时间上的OFDM符号工作得很好,但对其它符号效果不佳。由于符号的顺序没有改变,而9 OFDM符号情况下的第一个OFDM符号没有用处,因此本存储库中的脚本对待所有突发都是有9个OFDM符号的,并且不对第一个OFDM符号做任何处理。棘手的地方在于需要生成比数据载波数量(始终为600)多1个的零相关序列,零化中间元素,将生成的样本映射到FFT的中心(采样率决定bin的数量),然后计算IFFT。

leegang12的专栏 1620

php 入门基础 必知必学

Php 语法入门 1:通常我们所写的PHP程序文件后缀, .php 2:php语言的开始标记"" ,结束标志'?>' 3: php语句 一个语句可以理解为让php解释器执行的一个命令. 语句必须以";"结束 用{}包围起来作为复合语句,可以当成一个单元体,要么都执行,都跳过. 4:php的注释 分为 单行注释 C风格的单行注释:    '// '开头, 后面的注

zhongbiaolai的专栏 725

DISM进行系统修复,进度条卡在63.2%的解决方法

一时用不了软件,安装修复的时候也出现问题 DISM一直卡在63.2%,等了好久时间,直接强制退出寻找最终的解决方案

码农研究僧的博客 1万+

手把手教你学GPU的KMD专栏--3.4 中断处理机制与优化

记住,中断处理是GPU与CPU通信的"桥梁",没有高效的中断处理,GPU的性能将无法充分发挥。KMD通过"快进快出"原则、事件标志机制、GPU本机围栏等技术,实现高效、低延迟的中断处理。:GPU本机围栏机制允许GPU在满足特定条件(如围栏值达到某个阈值)时才触发中断,而不是每次围栏更新都触发中断,从而显著减少CPU唤醒次数,降低功耗。正如Microsoft GPU架构师在2022年WinHEC大会上指出:"没有好的中断处理,再强大的GPU也会被系统延迟拖垮。:多个GPU设备共享中断,导致中断处理混乱。

MHD0815的博客 112

md5 php 加密后乱码_技术分享第四期—PHP

我渐渐就安于我的现状了,对于我的孤独,我也习惯了。总有那么多的人,追寻一些甜蜜温暖的东西,他们喜欢的永远是星星与花朵。但在星星雨花朵之中,怎样才能显得出一个人坚定的步伐呢。双层描边标题点击上方蓝字,关注我们创想技术分享Four技术分享第四弹来袭流水时间铁打小创前面三期的内容你学得怎么样呢有没有感觉到任通二脉被打通有没有体会到醍醐灌顶的感觉不管有没有跟着小创走无须畏惧路上遇到的种种难题前方...

weixin_39539563的博客 265

【图像去噪】论文精读:Restormer: Efficient Transformer for High-Resolution Image Restoration

论文题目:Restormer: Efficient Transformer for High-Resolution Image Restoration —— Restormer:用于高分辨率图像恢复的高效变压器高效Transformer模型用于图像恢复!由于卷积神经网络 (CNN) 在从大规模数据中学习可泛化的图像先验方面表现良好,因此这些模型已广泛应用于图像恢复和相关任务。最近,另一类神经架构 Transformer 在自然语言和高级视觉任务中显示出显着的性能提升。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1526

PHP初学者教程之必备6个技能

初学PHP时,不要好高骛远,脚踏实地的把LNMP搞熟练,打好基础再往更高的层次发展。今天给大家总结初学者应该学会的技能。 1.Linux 基本命令、操作、启动、基本服务配置(包括rpm安装文件,各种服务配置等);会写简单的shell脚本和awk/sed脚本命令等。 2.Nginx 做到能够安装配置nginx+php,知道基本的nginx核心配置选项,知道server/fastcgi_p

coco510的专栏 998

杰理AC695N/AC696N/AC701N系列芯片在线调音教程

本教程详细介绍AC695N/AC696N/AC701N芯片在线音效调试方法,包括工具准备(需安装杰理包管理器)、程序修改(需关闭USB功能并启用在线调试宏)、连接方式(USB或串口)、音效调节步骤(EQ和混响参数调整)以及配置保存。注意事项包括版本匹配、连接检查和供电稳定等,并提供常见问题解决方案。适用于快速配置实时音效调试环境并保存最终配置。

qq_42014563的博客 1401

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

php基本的流程控制语句,php流程控制语句有哪些?php必学知识点

什么是流程控制:在声明式的编程语言中,流程控制指令是指会改变程序运行顺序的指令,可能是运行不同位置的指令,或是在二段(或多段)程序中选择一个运行。命令式编程:命令“机器”如何去做事情(how),这样不管你想要的是什么(what),它都会按照你的命令实现。声明式编程:告诉“机器”你想要的是什么(what),让机器想出如何去做(how)。不论是PHP还是别的语法,程序总是由若干条语句组成。从执行方式上...

weixin_42377790的博客 933

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【PHP开发900个实用技巧】143.= Null合并赋值: 代码简洁度的又一次飞跃!

《PHP判空代码优化神器:??=运算符实战指南》 本文深入解析PHP 7.4引入的??=运算符,帮助开发者简化重复判空代码。文章通过5个维度展开:1)基础概念,解释??=作为Null合并赋值的作用;2)与传统写法的对比,展示83%的代码精简效果;3)三大实战场景,包括配置项兜底、API响应处理和类属性初始化;4)使用避坑指南,强调变量作用域的重要性;5)底层原理,揭示语法糖的编译优化本质。全文以生动比喻和代码对比,演示如何用一行??=替代多行判空逻辑,同时提醒注意潜在误区,最终实现代码可读性与性能的双重提升

827

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

PHP 基础必学:isset / is_null / empty 区别总结

🔵松散比较:使用两个等号 ==比较,只比较值,不比较类型。🔵严格比较:用三个等号(全等):===比较,除了比较值,也比较类型。虽然 PHP 是弱类型语言,但也需要明白变量类型及它们的意义。因为我们经常需要对 PHP 变量进行比较,包含松散和严格比较。例如,"42"是一个字符串而 42 是一个整数。false 是一个布尔值而"false"是一个字符串。注意:empty() 函数对于未定义的变量也会返回true,因此在使用empty()函数之。问题:如果只想比较类型是否相同,怎么比较?

2501_94116707的博客 249

PHP高手进阶必学:array_map与array_filter的10种优雅应用场景(附性能对比)

掌握PHP数组处理精髓,详解PHP数组函数array_map与array_filter在数据清洗、批量转换、条件筛选等10种实战场景的应用技巧,对比性能差异,提升代码效率。方法实用,案例清晰,值得收藏。

Instrustar的博客 1152

bootstrap 一排5个_小白编程零基础必看!HTML5必学的6个知识点,

引言今天小编分享HTML5必学的6个知识点,小白福利,希望能够帮到大家,请看下面的详细内容1.HTML基础内容包括:(HTML简介与历史版本、常用开发软件、常见标签与属性、表格与表单、标签规范与标签语义化、实战:网页结构布局)2.CSS3基础内容包括:(css3常见样式、css3选择器、变形与动画、3D效果与关键帧、弹性盒模型)3.移动端布局(移动端基本概念、viewport窗口设置、移动端布局方...

weixin_36102930的博客 99

java必学的算法_java必学的5种排序算法

webAPI获得链接客户端IP地址public static class HttpRequestMessageExtensions { private const string HttpContext = "MS_HttpC ...&lbrack;转&rsqb;浅析AD Exchange——RTB模式在上一篇文章中,我们了解了程序化购买,并且知道程序化购买的最基本的一种RTB的竞价...

weixin_30869777的博客 174

web程序员入门必学之会话技术cookie

概念可以使在同一台浏览器向同一个服务器的多次请求之间,将数据持久化存储的一种技术!为什么需要会话技术?因为B/S请求响应模式是无状态无记忆的,任意的请求间,不存在任何的联系,不能将请求状态保持下去!正式由于B/S的这种特点,导致了我们用户无法实现连续的业务逻辑,比如:购物!填写资料!分类cookie技术:基于浏览器端的一种技术session技术:基于服务器端的一种技术COOKIE初步基本原理允许服...

csdn_hyue的博客 450

php 框架优化,10个技巧优化PHP程序Laravel 5框架

10个技巧优化PHP程序Laravel 5框架性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能。接下来分享一些开发的最佳实践,还有调优技巧,欢迎阅读,更多内容请关注应届毕业生网!这里是简单的列表:配置信息缓存 artisan config:cache路由缓存 artisan route:cache类映射加载优化 artisan optimize自动...

weixin_35732273的博客 201

渗透必学的php连接,2019-10-11:渗透测试,基础学习,php+mysql连接,笔记

mysql导出数据1,通过工具如phpmyadmin,navicat等2,mysqldump -u -p 库名 > /数据库文件, mysqldump -u -p 库名 表名 > /表数据文件3,select 字段 from 表名 into outfile “文件”mysql 5.5以后首次从数据库中都暗处文件,数据库会运行secure-file-priv 安全机制,会限制导出文件, ...

weixin_31125161的博客 195

php学习路线图,YY公开课之PHP学习路线图

部分文字内容:Php的特点1、 成本低:开源支持多、社区氛围浓、对应的软件基本上是免费的2、易上手,同时也比较难真正驾驭3、不吃内存,低配置电脑照样不烫手、不能煮鸡蛋4、php开发人员分化严重,要么是新手,要么就是高手。5、PHP就是用来做网站或者一定领域的web应用的那么问题来了,我们应该怎么学习php呢?第一阶段:热身首先,php是做网站的。那么网站是由什么组成的?1、html2、css3、 ...

weixin_39838302的博客 141

零基础入门PHP必学的Smarty模板引擎学习路线,了解一下?

最近有不少小伙伴私信小编要Smarty的学习资料,今天就把Smarty相关的课堂讲义整理给小伙伴们,希望对小伙伴们在学习上有所帮助。 在实际的开发中,公司都是分工明确的,PHP程序员主要负责PHP代码也就是业务逻辑相关的部分,Web前端程序员主要负责的是HTML、CSS、JavaScript也就是让页面更加美观用户体验更好的部分,模板引擎就起到了模板(界面)与业务逻辑代码相分离的一种解决方案。 模板引擎原理示意图: Html页面先使用占位符代替,然后模板引擎再从PHP文件读取真实数据,并最终生成一个

woliuqiangdong的博客 361
上一篇: Laravel 10事件广播安全策略全公开:防止未授权订阅的5大防护措施
下一篇: PHP 5.4 Traits 冲突处理完全手册(资深架构师20年经验倾囊相授)
IterLoom
博客等级 码龄1年 171粉丝 2173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值