PHP的include和require
文章目录
- 环境
- require和include
- require VS include
- require(include) VS require_once(include_once)
- 路径问题
- 当前工作目录对相对路径的影响
- 题外话
- 总结
- 其它
- 参考
环境
- Windows 11 专业版
- XAMPP v3.3.0
- PHP 8.2.12
- Apache 2.4.58
- VSCode 1.99.3
require和include
require
和 include
有点类似于C语言的 include
和Java的 import
。
比如,创建文件 test0504_util1.php
如下:
<?php
function add($a, $b) {return $a + $b;
}const PI = 3.14; // 注意全部用大写字母,且不加 `$` 前缀。$name = '张三';echo "我是util1" . PHP_EOL;
?>
该PHP文件里:
- 定义了
add()
函数 - 定义了常量
PI
- 定义了变量
$name
- 有一段全局的代码
在同级目录里,创建文件 test0504_1.php
如下:
<?php
require 'test0504_util1.php';$x = add(1, 2);
echo "x = $x" . PHP_EOL;echo "PI = " . PI . PHP_EOL;echo "name = $name" . PHP_EOL;
?>
在该PHP文件里引入了 test0504_util1.php
文件。因此,就可以使用其中的函数、常量、变量。
运行结果如下:
我是util1
x = 3
PI = 3.14
name = 张三
注意,被引入文件的全局代码,也会被运行(本例中输出了 我是util1
)。
上面的例子里,引用文件使用了被引用文件的函数、常量、变量。反过来,被引用文件也可以使用引用文件的函数、常量、变量。
比如,可以把被引用文件当作一个模板,引用文件在引用模板前,先设置好数据。
一个典型的例子是页面的header。
创建文件 test0504_header1.php
如下:
<head><title><?phpecho "当前页面:$title";?></title>
</head>
该文件是将要被引用的模板文件,其中有一个变量 $titile
。
创建文件 test0504_page1.php
如下:
<html><?php$title = 'page1';require 'test0504_header1.php';?><body><p>这是页面1</p></body>
</html>
类似的,创建文件 test0504_page2.php
如下:
<html><?php$title = 'page2';require 'test0504_header1.php';?><body><p>这是页面2</p></body>
</html>
在这两个文件中,先设置好 $title
变量的值,然后引用模板文件。
访问页面1:
访问页面2:
可见,二者的header是相同的模板,只是title的值不同。
require VS include
require
和 include
的主要区别在于,对于被引用文件不存在时的行为:
require
:如果文件不存在,PHP 会抛出E_COMPILE_ERROR
,并立即终止脚本:
Fatal error: Uncaught Error: Failed opening required 'xxx.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\test0504_2.php:2
include
:如果文件不存在,PHP 会抛出E_WARNING
,但脚本会继续执行后续代码:
Warning: include(): Failed opening 'xxx.php' for inclusion (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\test0504_2.php on line 3
使用场景:
require
:用于加载程序运行必需的依赖(如数据库连接、核心函数库)。也就是“必须要有,没有不行”的文件include
:用于加载可选的模板文件或用户自定义内容。也就是“可有可无,没有也影响不大”的文件
require(include) VS require_once(include_once)
二者的区别在于,当重复引入同一个文件时:
require
:会引入多次require_once
:只会引入一次
该使用 require
还是 require_once
,取决于具体的应用场景。比如,同一个页面上确实需要多次显示同一个东西(比如一个 div
元素),那就在不同的位置使用require
来多次引入同一文件。如果是要引入类、变量、常量等,那显然应该使用 require_once
,以避免重复定义,冲突报错。
include
和 include_once
也同理。
路径问题
当前工作目录对相对路径的影响
在上面的例子里,引入的是同一目录里的文件,所以没有指定目录:
require 'xxx.php';
这里使用的是相对路径(相对于当前脚本文件)。
使用相对路径的问题是,如果“当前工作目录”发生了变化,则相对路径所代表的绝对路径也改变了。
现有目录结构如下:
htdocs|----dir1| |----1.php|----dir2|----test0504_3.php
在 1.php
里,定义了变量 $aaa
:
<?php$aaa = 123;
?>
在 test0504_3.php
里引入 1.php
:
<?phprequire '../dir1/1.php';echo $aaa . PHP_EOL;
?>
在VSCode里运行,是没有问题的,在浏览器里访问 http://localhost/dir2/test0504_3.php
,也没有问题。
修改文件如下:
<?phpecho "__DIR__ : " . __DIR__ . PHP_EOL;echo "get_include_path() : " . get_include_path() . PHP_EOL;echo "getcwd() : " . getcwd() . PHP_EOL;echo "realpath('../dir1/1.php') : " . realpath('../dir1/1.php') . PHP_EOL; echo "stream_resolve_include_path('../dir1/1.php') : " . stream_resolve_include_path('../dir1/1.php') . PHP_EOL;require '../dir1/1.php';echo $aaa . PHP_EOL;
?>
其中:
__DIR__
:脚本文件所在的绝对路径get_include_path()
:PHP查找文件的路径getcwd()
:当前工作目录realpath()
:获取目标路径的绝对路径(比如目标路径可能会含有..
)stream_resolve_include_path()
:在include_path
指定的目录列表中查找目标文件,并返回第一个匹配的绝对路径。若文件不存在,则返回false
在VSCode里运行,输出结果是:
__DIR__ : C:\xampp\htdocs\dir2
get_include_path() : C:\xampp\php\PEAR
getcwd() : C:\xampp\htdocs\dir2
realpath('../dir1/1.php') : C:\xampp\htdocs\dir1\1.php
stream_resolve_include_path('../dir1/1.php') : C:\xampp\htdocs\dir1\1.php
123
如果在命令行里,在 dir2
目录下运行:
PS C:\xampp\htdocs\dir2> php .\test0504_3.php
Xdebug: [Step Debug] Time-out connecting to debugging client, waited: 200 ms. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port).
__DIR__ : C:\xampp\htdocs\dir2
get_include_path() : C:\xampp\php\PEAR
getcwd() : C:\xampp\htdocs\dir2
realpath('../dir1/1.php') : C:\xampp\htdocs\dir1\1.php
stream_resolve_include_path('../dir1/1.php') : C:\xampp\htdocs\dir1\1.php
123
可见和在VSCode运行是一样的。
注:输出结果里有个连接超时,这是因为 php.ini
里配置了Xdebug。在命令行运行php,会导致Xdebug连接debug client的错误(localhost:9003)。不过并不影响代码运行。加上 -n
选项,表示不使用 php.ini
配置,就不会提示这个信息了。
运行时加上 -n
选项(不使用 php.ini
配置文件):
PS C:\xampp\htdocs\dir2> php -n .\test0504_3.php
__DIR__ : C:\xampp\htdocs\dir2
get_include_path() : .;C:\php\pear
getcwd() : C:\xampp\htdocs\dir2
realpath('../dir1/1.php') : C:\xampp\htdocs\dir1\1.php
stream_resolve_include_path('../dir1/1.php') : C:\xampp\htdocs\dir1\1.php
123
可见,加不加 -n
,影响的是 include_path
。
如果在 dir2
以外的目录里运行,就会出错。比如在 C:\
目录运行:
PS C:\> php -n C:\xampp\htdocs\dir2\test0504_3.php
__DIR__ : C:\xampp\htdocs\dir2
get_include_path() : .;C:\php\pear
getcwd() : C:\
realpath('../dir1/1.php') :
stream_resolve_include_path('../dir1/1.php') :Warning: require(../dir1/1.php): Failed to open stream: No such file or directory in C:\xampp\htdocs\dir2\test0504_3.php on line 8Fatal error: Uncaught Error: Failed opening required '../dir1/1.php' (include_path='.;C:\php\pear') in C:\xampp\htdocs\dir2\test0504_3.php:8
Stack trace:
#0 {main}thrown in C:\xampp\htdocs\dir2\test0504_3.php on line 8
加不加 -n
选项都会报错,因为二者的 include_path
虽然不同,但都没找到所需文件。
可见,当前工作目录是 C:\
时,require语句出错了,因为找不到 ../dir1/1.php
文件。
题外话
如果不是在 dir2
目录里,而是在其父目录 htdocs
目录里创建 test0504_2.php
文件,并修改相对路径,如下:
<?phpecho "__DIR__ : " . __DIR__ . PHP_EOL;echo "get_include_path() : " . get_include_path() . PHP_EOL;echo "getcwd() : " . getcwd() . PHP_EOL;echo "realpath('dir1/1.php') : " . realpath('dir1/1.php') . PHP_EOL; echo "stream_resolve_include_path('dir1/1.php') : " . stream_resolve_include_path('dir1/1.php') . PHP_EOL;require 'dir1/1.php';echo $aaa . PHP_EOL;
?>
则不会报错:
PS C:\> php -n C:\xampp\htdocs\test0504_2.php
C:\
123
明明当前工作目录还是 C:\
,使用相对路径 dir1/1.php
为什么不报错呢?
这会不会与XAMPP或者 php.ini
有关呢?但我尝试停止了Apache,而且加上 -n
选项,甚至把 php.ini
里Xdebug相关的配置都删掉了,但仍然是这样的行为。
我问了DeepSeek,它也答不出个所以然来,大概意思是说:
- 对于非
../
开头的相对路径(如dir1/1.php
),某些PHP版本会"智能"地尝试从脚本所在目录解析 - 对于
../
开头的路径,PHP出于安全考虑会更严格地仅基于当前工作目录解析
总结
不管怎么样,使用相对路径总是不靠谱的,还是使用绝对路径吧。
// 在任何文件中都这样写
require __DIR__ . '/dir1/1.php'; // 当前脚本文件在 htdocs 目录下
require __DIR__ . '/../dir1/1.php'; // 当前脚本文件在 htdocs/dir2 目录下
这里使用了魔术常量 __DIR__
,表示脚本文件的绝对路径。
通过使用 __DIR__
再加上目标文件的相对路径,就得到了目标文件的绝对路径,这样做可以确保:
- 不受工作目录影响
- 不受
include_path
设置影响 - 不受-n参数影响
其它
Windows和Linux的路径分隔符是不同的:
- Windows:
\
- Linux:
/
在上面的代码中,路径分隔符用的都是 /
。在Windows下运行也是没问题的。所以,不管什么操作系统,统一都用 /
好了。
注:如果需要,可以使用 DIRECTORY_SEPARATOR
,以适配不同操作系统,比如 'dir' . DIRECTORY_SEPARATOR . 'file.php'
。不过一般没必要这么做,直接用 /
就行。
参考
https://www.php.net/docs.php
相关文章:
PHP的include和require
文章目录 环境require和includerequire VS includerequire(include) VS require_once(include_once)路径问题当前工作目录对相对路径的影响题外话总结其它 参考 环境 Windows 11 专业版XAMPP v3.3.0 PHP 8.2.12Apache 2.4.58 VSC…...
日本人工智能发展全景观察:从技术革新到社会重构的深度解析
一、日本IT产业演进与AI技术崛起的历史脉络 1.1 信息化时代的奠基(1990-2010) 日本IT产业的腾飞始于"信息高速公路计划"的实施。1994年NTT推出全球首个商用光纤网络,至2005年实现全国光纤覆盖率突破80%。这一时期培育出富士通、N…...
什么是DGI数据治理框架?
DGI数据治理框架是由数据治理研究所(Data Governance Institute, DGI)提出的一套系统性方法论,旨在帮助企业或组织建立有效的数据治理体系,确保数据资产的高质量管理、合规使用和价值释放。以下是关于DGI数据治理框架的核心内容&a…...
[硬件电路-12]:LD激光器与DFB激光器功能概述、管脚定义、功能比较
一、LD激光器(普通半导体激光器)功能 核心功能: LD激光器通过半导体材料的电子-空穴复合实现受激辐射,将电能直接转换为高相干性激光,是光电子系统的核心光源。 基础光发射功能 工作原理:正向偏置电流注入…...
升级 CUDA Toolkit 12.9 与 cuDNN 9.9.0 后验证指南:功能与虚拟环境检测
#工作记录 在 NVIDIA 发布 CUDA Toolkit 12.9 与 cuDNN 9.9.0 后,开发者纷纷选择升级以获取新特性和性能提升。 CUDA Toolkit 12.9 与 cuDNN 9.9.0 发布,带来全新特性与优化-CSDN博客 然而,升级完成并不意味着大功告成,确认升级后…...
湖仓一体架构解析:如何平衡数据灵活性与分析性能?
一、什么是湖仓一体架构?解决哪些核心问题? 在数据爆炸的时代,企业面临着如何高效处理和分析海量数据的挑战。传统架构难以同时满足灵活性和性能需求,湖仓一体架构应运而生。 传统数据架构的局限 数据湖(存储各类原…...
56、【OS】【Nuttx】编码规范解读(四)
背景 接之前 blog 53、【OS】【Nuttx】编码规范解读(一) 54、【OS】【Nuttx】编码规范解读(二) 55、【OS】【Nuttx】编码规范解读(三) 分析了行宽格式,注释要求,花括号风格等&#…...
MySQL基础关键_007_DQL 练习
目 录 一、题目 二、答案(不唯一) 1.查询每个部门薪资最高的员工信息 2.查询每个部门高于平均薪水的员工信息 3. 查询每个部门平均薪资等级 4.查询部门中所有员工薪资等级的平均等级 5.不用分组函数 max 查询最高薪资 6.查询平均薪资最高的部门编…...
气泡图、桑基图的绘制
1、气泡图 使用气泡图分析某一年中国同欧洲各国之间的贸易情况。 气泡图分析的三个维度: • 进口额:横轴 • 出口额:纵轴 • 进出口总额:气泡大小 数据来源:链接: 国家统计局数据 数据概览(进出口总额&…...
数据库Mysql_联合查询
或许自己的不完美才是最完美的地方,那些让自己感到不安的瑕疵,最终都会变成自己的特色。 ----------陳長生. 1.介绍 1.1.为什么要进行联合查询 在数据设计的时候,由于范式的需求,会被分为多个表,但是当我们要查询数据…...
数字孪生:解码智慧城市的 “数字神经系统”
当城市规模以惊人速度扩张,传统管理模式在交通拥堵、能源浪费、应急响应滞后等问题面前渐显乏力。数字孪生技术正以 “数字镜像” 重构城市运作逻辑,为智慧城市装上一套高效、智能的 “数字神经系统”。通过将物理世界的城市映射到虚拟空间,实…...
开源项目:optimum-quanto库介绍
项目地址:https://github.com/huggingface/optimum-quanto 官网介绍:https://huggingface.co/blog/quanto-introduction 量化是一种技术,通过使用低精度数据类型(如 8 位整数 (int8))而不是通常…...
C++学习:六个月从基础到就业——C++11/14:lambda表达式
C学习:六个月从基础到就业——C11/14:lambda表达式 本文是我C学习之旅系列的第四十篇技术文章,也是第三阶段"现代C特性"的第二篇,主要介绍C11/14中引入的lambda表达式。查看完整系列目录了解更多内容。 引言 Lambda表达…...
cesium基础设置
在上节新建的程序中,我们会看到有一行小字: 原因为我们没有输入token,想要让这行小字消失的方法很简单,前往cesium的官网注册账号申请token.然后在App.vue中如下方式添加token 保存后即可发现小字消失. 如果连logo都想去掉呢? 在源代码中,我们初始化了一个viwer,即查看器窗口…...
一些好玩的东西
🚀 终极挑战:用 curl 玩《星球大战》 telnet towel.blinkenlights.nl # 其实不是 curl,但太经典了! 效果:在终端播放 ASCII 版《星球大战》电影!(如果 telnet 不可用,可以试…...
ActiveMQ 与其他 MQ 的对比分析:Kafka/RocketMQ 的选型参考(二)
ActiveMQ、Kafka 和 RocketMQ 详细对比 性能对比 在性能方面,Kafka 和 RocketMQ 通常在高吞吐量场景下表现出色,而 ActiveMQ 则相对较弱。根据相关测试数据表明,Kafka 在处理大规模日志数据时,单机吞吐量可以达到每秒数十万条甚…...
HTML学习笔记(7)
一、什么是jQuery jQuery 是一个 JavaScript 库。他实现了JavaScript的一些功能,并封装起来,对外提供接口。 例子实现一个点击消失的功能,用JavaScript实现 <!DOCTYPE html> <html lang"en"> <head><meta …...
Jenkis安装、配置及账号权限分配保姆级教程
Jenkis安装、配置及账号权限分配保姆级教程 安装Jenkins下载Jenkins启动Jenkins配置Jenkins入门Jenkins配置配置中文配置前端自动化任务流新建任务拉取代码打包上传云服务并运行配置后端自动化任务流新建任务拉取代码打包上传云服务并运行账号权限分配创建用户分配视图权限安装…...
面向对象编程(Object-Oriented Programming, OOP)是什么?
李升伟 编译 简介 如果你已经接触过软件开发领域的话,你肯定听说过"面向对象编程"(Object-Oriented Programming, OOP)这个术语。但你知道什么是OOP吗?为什么它如此重要?在这篇文章中我们将深入解析OOP的基…...
Hotspot分析(1):单细胞转录组识别信息基因(和基因模块)
这一期我们介绍一个常见的,高分文章引用很高的一个单细胞转录组分析工具Hotspot,它可针对单细胞转录组数据识别有意义基因或者基因module,类似于聚类模块。所谓的”informative "的基因是那些在给定度量中相邻的细胞之间以相似的方式表达…...
从图文到声纹:DeepSeek 多模态技术的深度解析与实战应用
目录 一、引言二、DeepSeek 技术基础2.1 架构与原理2.2 多模态能力概述 三、文本与图像关联应用3.1 图文跨模态对齐技术3.1.1 技术原理3.1.2 DeepSeek 的独特方法 3.2 图像生成与文本描述3.2.1 应用案例3.2.2 技术实现 3.3 多模态检索系统中的应用3.3.1 系统搭建流程3.3.2 实际…...
cuDNN 9.9.0 便捷安装-Windows
#工作记录 从 CUDA12.6.3 和 cuDNN9.6.0 版本起,开启了使用 exe 安装包直接进行安装升级的支持模式,彻底改变了以往那种繁琐的安装流程。 在这两个版本之前,开发者在安装 CUDA 和 cuDNN 时,不得不手动下载 cuDNN 压缩包…...
profile软件开发中的性能剖析与内存分析
在软件开发中,“Profile”(性能剖析/性能分析)指的是通过工具详细监控程序运行时的各种性能指标,帮助开发者定位代码中的效率瓶颈或资源问题。当有人建议你 “profile 一下内存问题” 时,本质上是让你用专业工具动态分…...
0.0973585?探究ts_rank的score为什么这么低
最近在使用postgres利用ts_rank进行排序找到最符合关键词要求得内容时发现: 即使是相似的内容,得分也是非常非常得低(其中一个case是0.0973585)。看起来很奇怪,非常不可行。于是我又做了一个简单测的测试: SELECT ts_rank(to_tsvector(english, skirt), to_tsquery(skirt)…...
架构思维:利用全量缓存架构构建毫秒级的读服务
文章目录 一、引言二、全量缓存架构概述三、基于 Binlog 的缓存同步方案1. Binlog 原理2. 同步中间件3. 架构整合核心收益 四、Binlog 全量缓存的优缺点与优化优点缺点与取舍优化策略 五、其他进阶优化点六、总结 一、引言 架构思维:使用简洁的架构实现高性能读服务…...
永磁同步电机控制算法--基于PI的位置伺服控制
一、原理介绍 永磁同步伺服系统是包含了电流环、速度环和位置环的三环控制系统。 伺服系统通过电流检测电路和光电编码器检测电动机三相绕组电流和转子位置θ,通过坐标变换,计算出转矩电流分量iq和励磁电流分量id。 位置信号指令与实际转子位置信号的差…...
P1603 斯诺登密码详解
这个题目,我详细讲题解的两种方法,洛谷里面的题解,我是觉得大部分的时候是差了点意思的,不是看不懂,就是新知识没人详细讲解,我也是经常破防 先看题目: 题目是什么意思: 1…...
计算方法实验六 数值积分
【实验性质】综合性实验。 【实验目的】理解插值型积分法;掌握复化积分法算法。 【实验内容】 1对 ,用复化梯形积分和变步长梯形积分求值(截断误差不超过)。 【理论基础】 积分在工程中有重要的应用,数值积分…...
avx指令实现FFT
avx指令实现FFT 参考代码实现的难点补充的avx指令fft_avx256实现可继续优化的点 C语言实现FFT变换参考的代码是参考大模型生成的代码,很明显其使用的是位反转和蝶形变换的方法实现的FFT变换。但是大模型无法正确的生成用avx指令写的FFT变换的算法,所以这…...
Nginx 核心功能之正反代理
目录 一、Nginx 二、正向代理 三、反向代理 四、Nginx 缓存 1. 缓存功能的核心原理和缓存类型 2. 代理缓存功能设置 五、Nginx rewrite和正则 (1)Nginx 正则 (2)nginx location (3)Rewrite &…...
function包装器的意义
一:function包装器的概念 function包装器 也叫作适配器。C中的function本质是一个类模板,也是一个包装器。 二:需要function包装器的场景 那么我们来看看,我们为什么需要function呢? 一个需要包装器的场景:…...
【ThinkBook 16+ 电脑重做系统type-c接口部分功能失效解决方案】
ThinkBook 16 电脑重做系统type-c接口部分功能失效解决方案 问题回顾:重做电脑后,type-c接口部分功能失效,充电正常,连接外置硬盘正常,无法连接外拓显示器,显示usbc无信号(不同设备可能显示不同…...
【言语理解】中心理解题目之选项分析
front:中心理解题目之结构分析 4.1两出处六有误 两出处 背景、例子、分析论证中提炼的选项出处有误,一般不选但是和因此之前、不是而是 的不是部分、被指代部分提炼的选项出处有误,一般不选。 六有误 片面:原文并列谈论两方面,只…...
[原创](现代Delphi 12指南):[macOS 64bit App开发]: [1]如何加载动态链接库, 并无缝支持原生底层开发?
[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…...
VTK入门指南
什么是VTK VTK (Visualization Toolkit) 是一个开源的、跨平台的计算机图形学、图像处理和可视化系统。它提供了丰富的算法和高级工具,用于3D计算机图形学、图像处理和可视化。 安装VTK Windows平台 下载预编译版本: 从VTK官网或GitHub发布页面下载 …...
开始一个vue项目-day2
这次新增的功能有: 1、使用cookie存储token 参考网站:https://vueuse.org/ 安装包: npm i vueuse/integrations npm i universal-cookie^7 2、cookie的设置读取和删除,代码:composables/auth.js import { useCookies } from …...
Baklib驱动企业知识管理AI升级
Baklib如何实现知识AI化 Baklib通过构建企业级知识中台的核心能力,将人工智能技术深度融入知识管理的全生命周期。其底层架构采用自然语言处理(NLP)与机器学习算法,实现对企业文档的智能分类与语义解析。例如,系统可自…...
Linux线程同步机制深度解析:信号量、互斥锁、条件变量与读写锁
Linux线程同步机制深度解析:信号量、互斥锁、条件变量与读写锁 一、线程同步基础 在多线程编程中,多个线程共享进程资源(如全局变量、文件描述符)时,若对共享资源的访问不加控制,会导致数据不一致或竞态条…...
js逆向绕过指纹识别
一、兼容性说明 官方支持 curl_cffi 明确支持 Windows 平台,并提供了预编译的安装包。其核心功能(如浏览器指纹模拟、HTTP/2 支持)在 Windows 上与 Linux/macOS 表现一致。 版本要求 • Python 3.8 及以上版本(推荐 Pyth…...
笔记整理六----OSPF协议
OSPF 动态路由的分类: 1.基于网络范围进行划分--将网络本身划分为一个个AS(自治系统---方便管理和维护) 内部网关协议---负责AS内部用户之间互相访问使用的协议 IGP--RIP EIGRP ISIS OSPF 外部网关协议--负责AS之间(整个互联网&…...
USB Type-C是不是全方位优于其他USB接口?
首先,USB TypeC接口内部引脚呈中心对称分布,正插、反插都能用,所以可以肓插,使用起来非常方便顺手。 其次,USB TypeC接口体积很小,特别是很薄,几乎适用于所有设备。而USB TypeA就是因为不方便应…...
信息系统监理师第二版教材模拟题第一组(含解析)
信息系统监理基础 信息系统监理的核心目标是( ) A. 降低项目成本 B. 确保项目按合同要求完成 C. 提高开发人员技术水平 D. 缩短项目周期答案:B 解析:信息系统监理的核心目标是确保信息系统工程项目按照合同要求、技术标准和规范完成,保障项目质量、进度和投资控制。 下列哪…...
NPP库中libnppist模块介绍
1. libnppist 模块简介 libnppist 是 NPP 库中专注于 图像统计分析与直方图计算 的模块,提供 GPU 加速的统计操作,适用于计算机视觉和图像处理中的特征提取与分析。 核心功能包括: 直方图计算(支持单通道/多通道) 统…...
k230摄像头初始化配置函数解析
通过 csi id 和图像传感器类型构建 Sensor 对象。 在图像处理应用中,用户通常需要首先创建一个 Sensor 对象。CanMV K230 软件可以自动检测内置的图像传感器,无需用户手动指定具体型号,只需设置传感器的最大输出分辨率和帧率。有关支持的图像…...
Spring的循环依赖问题
文章目录 一、什么是循环依赖?二、Spring 是如何解决循环依赖的?1.三级缓存2.解决循环依赖的流程 三、三级缓存机制可以解决所有的循环依赖问题吗?1. 为什么三级缓存在这里无效?2. 如何解决构造器循环依赖? 四、循环依…...
华为鸿蒙PC:开启国产操作系统自主化新纪元
——全栈自研、生态重构与未来挑战 2025年5月,一个值得中国科技界铭记的时间点。华为正式推出首款搭载鸿蒙操作系统(HarmonyOS)的PC产品。乍一听这像是又一款新电脑的发布,但它背后的意义远比表面更深远——这是中国首次推出从操…...
【LeetCode Hot100】动态规划篇
前言 本文用于整理LeetCode Hot100中题目解答,因题目比较简单且更多是为了面试快速写出正确思路,只做简单题意解读和一句话题解方便记忆。但代码会全部给出,方便大家整理代码思路。 70. 爬楼梯 一句话题意 每次爬1or2,问爬到n的路…...
【Java JUnit单元测试框架-60】深入理解JUnit:Java单元测试的艺术与实践
在当今快节奏的软件开发环境中,保证代码质量的同时又要快速交付成为了开发者面临的主要挑战。单元测试作为软件测试金字塔的基石,为我们提供了一种高效的解决方案。而在Java生态系统中,JUnit无疑是单元测试框架的代名词。本文将全面探讨JUnit…...
Java运算符学习笔记
运算符 -运算符介绍 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。 算数运算符赋值运算符关系运算符[比较运算符]逻辑运算符位运算符[需要二进制基础]三元运算符 -算数运算符 介绍 算数运算符是对数值类型的变量进行运算的,在Java程…...
shell编程补充内容(Linux课程实验3)
一、求前五个偶数的和 1.这里先介绍要用到的expr 1. 整数计算 # 加法(注意运算符两侧空格) $ expr 10 20 30# 带括号的运算(需要转义) $ expr \( 10 20 \) \* 2 60# 取模运算 $ expr 15 % 4 注意:仅支持整数&…...