PHP知识点大全(一)

简介: 教程来源 http://unbgv.cn/category/shengxiaoyunshi.html PHP是开源服务器端脚本语言,专为Web开发设计,可嵌入HTML。语法简洁、跨平台、数据库支持强,全球超70%网站使用(如WordPress、百度)。本文系统梳理PHP基础语法、变量类型、环境搭建等核心知识,兼顾新手入门与进阶参考。

PHP(Hypertext Preprocessor,超文本预处理器)是一种通用开源脚本语言,尤其适合Web开发,可以嵌入HTML中。自1994年由Rasmus Lerdorf创建以来,PHP已经发展成为全球最流行的服务器端编程语言之一。根据W3Techs的统计,全球超过70%的网站使用PHP作为服务器端语言,包括Facebook、Wikipedia、WordPress、百度等知名平台。PHP以其简单易学、功能强大、社区活跃等优势,成为后端开发者的首选语言之一。本文将系统全面地梳理PHP的核心知识点,从基础语法到高级特性,帮助初学者建立完整的知识体系,也为有经验的开发者提供深入的技术参考。

一、PHP基础概述

1.1 什么是PHP?
PHP是一种开源的服务器端脚本语言,专门为Web开发而设计。PHP代码在服务器上执行,生成HTML发送给客户端浏览器。这意味着用户无法直接看到PHP代码,只能看到执行后的结果,这使得PHP非常安全。

核心特性:
跨平台:可在Windows、Linux、macOS等多种操作系统上运行
开源免费:无需支付任何授权费用
简单易学:语法借鉴C语言和Perl,学习曲线平缓
强大的数据库支持:支持MySQL、PostgreSQL、Oracle等20多种数据库
丰富的内置函数:超过1000个内置函数,覆盖各种常见需求
庞大的生态系统:拥有Composer、Laravel、Symfony等丰富的工具和框架

1.2 环境搭建
PHP开发环境的搭建非常灵活,常用的集成环境有:

# Windows:使用XAMPP、WampServer或phpStudy
# 下载安装包,一键安装Apache + MySQL + PHP

# macOS:使用MAMP或Homebrew
brew install php
brew install mysql

# Linux(Ubuntu/Debian):
sudo apt update
sudo apt install php
sudo apt install php-mysql php-curl php-gd php-xml php-mbstring

# 查看PHP版本
php -v

# 运行PHP内置服务器(PHP 5.4+)
php -S localhost:8000

# 检查PHP配置
php -i

1.3 PHP标记
PHP代码需要嵌入到HTML中,使用特定的标记来标识。

<!DOCTYPE html>
<html>
<head>
    <title>PHP示例</title>
</head>
<body>

<!-- 标准标记:最常用 -->
<?php
    echo "Hello, World!";
    // 这是单行注释
    /* 这是
       多行注释 */
?>

<!-- 简短标记(需要在php.ini中启用short_open_tag) -->
<? echo "Hello"; ?>

<!-- ASP风格标记(需要在php.ini中启用asp_tags,已废弃) -->
<% echo "Hello"; %>

<!-- 脚本风格标记 -->
<script language="php">
    echo "Hello";
</script>

<!-- 输出简写:直接输出变量或表达式 -->
<?= "直接输出" ?>
<?= date('Y-m-d') ?>

</body>
</html>

1.4 基本语法

<?php
// 1. 每个语句以分号结尾
echo "Hello";
$name = "张三";
$age = 25;

// 2. 大小写敏感性
// 变量名区分大小写
$Name = "李四";
$name = "王五";  // 不同的变量

// 关键字不区分大小写
ECHO "Hello";
echo "World";

// 函数名也不区分大小写
ECHO "Hello";
echo "World";

// 3. 空白处理:忽略多余的空格、制表符和换行
$name    =    "张三";  // 空格会被忽略
echo $name;
?>

二、变量与数据类型

2.1 变量
PHP中的变量以美元符号$开头,后跟变量名。变量名由字母、数字和下划线组成,但不能以数字开头。

<?php
// 变量声明和赋值
$name = "张三";           // 字符串
$age = 25;                // 整数
$price = 19.99;           // 浮点数
$isActive = true;         // 布尔值
$fruits = array("苹果", "香蕉", "橙子");  // 数组

// 变量名规则
$myVar = "正确";
$_private = "以下划线开头";
$myVar123 = "包含数字";
// $123var = "错误";  // 不能以数字开头
// $my-var = "错误";  // 不能包含连字符

// 变量的变量(动态变量名)
$varName = "username";
$$varName = "张三";  // 相当于 $username = "张三"
echo $username;      // 输出:张三

// 变量检测
$undefinedVar;  // 声明但未赋值
echo isset($undefinedVar);  // false
echo isset($name);           // true
unset($name);                // 删除变量
echo isset($name);           // false

// 预定义变量(超全局变量)
echo $_SERVER['HTTP_USER_AGENT'];  // 浏览器信息
echo $_SERVER['REMOTE_ADDR'];      // 客户端IP
echo $_GET['id'];                   // URL参数
echo $_POST['username'];            // POST数据
echo $_SESSION['user_id'];          // 会话变量
echo $_COOKIE['theme'];             // Cookie

2.2 数据类型
PHP支持8种原始数据类型,包括4种标量类型、2种复合类型和2种特殊类型。

<?php
// ========== 标量类型 ==========

// 1. boolean(布尔型)
$isTrue = true;
$isFalse = false;
echo $isTrue;   // 输出:1
echo $isFalse;  // 输出:空字符串

// 2. integer(整型)
$int1 = 42;           // 十进制
$int2 = 0b101010;     // 二进制(42)
$int3 = 052;          // 八进制(42)
$int4 = 0x2A;         // 十六进制(42)
echo PHP_INT_MAX;     // 整数最大值
echo PHP_INT_SIZE;    // 整数字节数

// 3. float(浮点型)
$float1 = 3.14;
$float2 = 3.14e2;     // 314
$float3 = 3.14e-2;    // 0.0314
echo PHP_FLOAT_MAX;   // 浮点数最大值

// 4. string(字符串)
$str1 = '单引号字符串';
$str2 = "双引号字符串";
$name = "张三";
echo "你好,$name";    // 双引号会解析变量
echo '你好,$name';    // 单引号不解析变量

// 字符串定界符
$heredoc = <<<EOT
这是heredoc语法,支持变量解析
$name,你好!
EOT;

$nowdoc = <<<'EOT'
这是nowdoc语法,不解析变量
$name,你好!
EOT;

// ========== 复合类型 ==========

// 5. array(数组)
$indexed = array(1, 2, 3);           // 索引数组
$assoc = ["name" => "张三", "age" => 25];  // 关联数组
$multi = [
    "user1" => ["name" => "张三", "age" => 25],
    "user2" => ["name" => "李四", "age" => 30]
];

// 6. object(对象)
class Person {
    public $name;
    public $age;
}
$person = new Person();
$person->name = "张三";
$person->age = 25;

// ========== 特殊类型 ==========

// 7. resource(资源)
$file = fopen("test.txt", "r");
$conn = mysqli_connect("localhost", "user", "pass");

// 8. NULL
$nullVar = NULL;
$unsetVar;
echo is_null($nullVar);  // true

2.3 类型检测与转换

<?php
// 类型检测函数
$var = "Hello";
echo is_int($var);      // false
echo is_string($var);   // true
echo is_array($var);    // false
echo is_bool($var);     // false
echo is_float($var);    // false
echo is_null($var);     // false
echo is_numeric($var);  // false

// 类型强制转换
$num = "123";
$intVal = (int)$num;     // 123
$floatVal = (float)$num; // 123.0
$strVal = (string)$num;  // "123"
$boolVal = (bool)$num;   // true

// 使用函数转换
$intVal = intval("123");    // 123
$floatVal = floatval("3.14"); // 3.14
$strVal = strval(123);       // "123"

// 自动类型转换
$result = "10" + 20;    // 30(字符串自动转为数字)
$result = "10" . 20;    // "1020"(点号是字符串连接符)
$result = "10" + "20";  // 30
$result = "10abc" + 20; // 30("10abc"转为10)
$result = "abc" + 20;   // 20("abc"转为0)

2.4 常量
常量一旦定义,就不能改变其值。

<?php
// 使用define()定义常量
define("SITE_NAME", "我的网站");
define("PI", 3.14159);
define("DEBUG_MODE", true);
echo SITE_NAME;   // 输出:我的网站

// 使用const关键字定义常量(PHP 5.3+)
const MAX_SIZE = 100;
const APP_VERSION = "1.0.0";

// 常量名通常使用大写字母
define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASS", "123456");

// 常量检测
if (defined("SITE_NAME")) {
    echo SITE_NAME;
}

// 预定义常量
echo __LINE__;        // 当前行号
echo __FILE__;        // 文件完整路径
echo __DIR__;         // 目录路径
echo __FUNCTION__;    // 函数名
echo __CLASS__;       // 类名
echo __METHOD__;      // 方法名
echo __NAMESPACE__;   // 命名空间
echo PHP_VERSION;     // PHP版本
echo PHP_OS;          // 操作系统

来源:
http://unbgv.cn/

相关文章
|
2月前
|
前端开发
前端开发 之 15个炫酷按钮特效上【附完整源码】
本篇文章内容展示了灯光效果按钮、拉链式展开按钮、毛玻璃式按钮等众多炫酷按钮特效,并给出了完整代码及注释
369 6
|
1月前
|
SQL 监控 Java
分布式事务解决方案Seata之AT事务
Seata AT模式是零侵入分布式事务方案,基于改进两阶段提交(2PC),通过自动代理数据源、拦截SQL、记录undo_log实现全局事务一致性,无需修改业务代码,仅需`@GlobalTransactional`注解即可快速接入。
425 3
分布式事务解决方案Seata之AT事务
|
1月前
|
人工智能 数据可视化 机器人
OpenClaw一键部署攻略,手把手教你 “养龙虾”!
还在为部署OpenClaw踩坑发愁?“养龙虾”其实超简单!本文奉上阿里云一键云端部署攻略:全程可视化、零代码,仅两步——买预装服务器+填API密钥,5分钟即可拥有专属AI数字员工!支持微信/钉钉协同、文件处理、日程管理、代码辅助等,新手友好,成本低廉(新用户首月9.9元+7000万Token免费额度)。
597 25
|
1月前
|
NoSQL 网络协议 Cloud Native
【Azure Redis】云原生环境下的 Redis 超时之谜:为什么 15 分钟后应用才恢复?
云原生中Redis短暂不可用后应用持续超时15分钟?问题不在Redis,而在Linux TCP默认重传机制(tcp_retries2=15)与长连接模型的错位。需三管齐下:调低内核重传次数、客户端显式配置超时与自动重连、应用层引入断路器与弹性重试。
198 20
|
1月前
|
Ubuntu 算法 关系型数据库
Debian/Ubuntu 环境 PolarDB-X 单机版 DEB 包安装综合指南
本文整合阿里云文档,详解Ubuntu 18.04与Debian 10下PolarDB-X单机版安装:因官方仅提供RPM包,需用alien转DEB,但二者压缩格式不同(Ubuntu用zstd,Debian 10不支持),必须在目标系统本地转换,不可复用。含依赖处理、配置初始化及启动验证全流程。
529 19
|
2月前
|
人工智能 运维 安全
基于云边协同的电线电缆押出机智能调机解决方案设计与落地
本方案基于云边协同架构,融合阿里云云原生技术,破解线缆行业押出机调机效率低、原料损耗高、数据孤岛等难题;边缘毫秒级实时控制+云端Al训练优化,实现调机提效80%、降耗60%,部署快、运维省、可扩展
363 9
基于云边协同的电线电缆押出机智能调机解决方案设计与落地
|
1月前
|
安全 Java 索引
java工具:《对Collections.sort排序后我想制定查询几条,比如list有10条,我只想获取前4条》
java工具:《对Collections.sort排序后我想制定查询几条,比如list有10条,我只想获取前4条》
120 12
|
1月前
|
弹性计算 人工智能 运维
新购续费同价,阿里云ECS云服务器2核2G3M99元1年、2核4G5M199元1年,2027年3月结束
阿里云打破“新购低价、续费高价”的行业惯例,推出“新购续费同价”的阿里云经济型e实例和通用算力型u1实例长效特惠活动,价格分别为99元/年和199元/年。活动面向新老用户、个人及企业,提供成本确定性。经济型e实例适合轻量级应用,通用算力型u1实例满足企业入门需求。此外,阿里云还为新用户提供轻量应用服务器抢购活动,价格低至38元/年。用户可在活动期内锁定长期低成本云服务。
490 6
|
1月前
|
弹性计算
如何查询自己的阿里云账户是新用户还是老用户?
阿里云新用户指无任何收费云产品购买记录的实名认证用户(含试用未付费者);老用户则已有付费订单。同一证件下多账号共享唯一新用户资格。本文详解判定标准与自查步骤,助力大家精准锁定优惠权益。
261 9
|
1月前
|
人工智能 JSON 自然语言处理
Vibe Coding 老翻车?可能是你的 AI 根本读不懂产品文档
Vibe Coding(氛围感编程)火爆Reddit/HN,主打自然语言驱动开发。但PDF需求文档常因排版复杂(表格错位、流程图丢失、多栏混乱)导致AI生成代码出错。解法:接入上海AI实验室开源的MinerU MCP Server,自动无损解析PDF为结构化Markdown,让AI真正“读懂”PRD,提升代码准确率。(239字)
280 6

热门文章

最新文章