PHP语言
PHP(全称:PHP: Hypertext Preprocessor,即“超文本预处理器”)是一种开源、通用的服务器端脚本语言,尤其适合 Web 开发。它可嵌入 HTML,在服务器上执行并生成动态内容(如网页、接口),再将结果返回给浏览器。
发展历史
* 1994年:Rasmus Lerdorf 为管理个人主页创建了 PHP 雏形。
* 1995年:发布 PHP/FI (Personal Home Page / Forms Interpreter),标志着 PHP 的诞生。
* 1998年:PHP 3 发布,重写了解析器并正式更名为 PHP,开始支持面向对象编程。
* 2000年:PHP 4 基于 Zend Engine 1.0,性能和扩展性大幅提升。
* 2004年:PHP 5 引入 Zend Engine 2.0,全面支持面向对象编程(OOP)。
* 2015年:PHP 7 发布,性能翻倍,并引入标量类型声明、返回类型声明等新特性。
* 2020年至今:PHP 8 引入 JIT(即时编译)和联合类型、属性、match 表达式等现代语言特性,持续提升性能与开发体验。
核心特点
* 开源免费:可自由使用、修改和分发,社区活跃,生态丰富。
* 服务器端执行:代码在服务器运行,生成 HTML 发送给客户端,保障源码安全。
* 易于嵌入 HTML:可在
".php" 文件中混合编写 HTML、CSS、JavaScript 和 PHP 代码。
* 跨平台:支持 Windows、Linux、macOS 等多种操作系统。
* 数据库集成能力强:原生支持 MySQL、PostgreSQL、SQLite 等,并提供 PDO 等通用接口。
* 语法简单:语法接近 C/Perl,对初学者友好,开发效率高。
* 支持多种协议:除 HTTP/HTTPS 外,还支持 FTP、IMAP、POP3、SMTP 等。
* 扩展性强:拥有大量内置函数和扩展(如 GD、cURL),也支持用 C 语言编写自定义扩展。
主要应用场景
* 动态网站与内容管理系统 (CMS):如 WordPress、Drupal、织梦等。
* 电子商务平台:各类在线商城、订单系统。
* 社交网络与社区论坛:如早期的 Facebook、各类 BBS。
* Web 应用与 API 接口:开发后端服务、RESTful API、微服务。
* 命令行脚本:用于定时任务、批量数据处理等。
* 图像处理与文件操作:生成验证码、缩略图,处理文件上传下载。
基本语法示例
PHP 文件通常以
".php" 为扩展名,可包含 HTML 和 PHP 代码。
1. Hello World
php
<?php
echo "Hello, World!";
?>
说明:
"<?php … ?>" 是 PHP 代码块标签 "echo" 用于输出内容 语句以分号 ";" 结尾
2. 变量与数据类型
PHP 是弱类型语言,变量以 "$" 开头,无需预先声明类型。
php
<?php
$name = "Alice"; // 字符串
$age = 25; // 整数
$price = 9.99; // 浮点数
$isStudent = true; // 布尔值
$colors = ["red", "green", "blue"]; // 数组
echo " name is age years old.";
?>
3. 控制结构
支持常见的 "if/else"、"switch"、"for"、"while"、"foreach" 等流程控制语句。
php
<?php
$score = 85;
if ($score >= 90) {
echo "优秀";
} elseif ($score >= 70) {
echo "良好";
} else {
echo "一般";
}
for ( i = 1; i <= 5; $i++) {
echo $i . " ";
}
?>
4. 函数
使用
"function" 关键字定义可复用的代码块。
php
<?php
function greet($name) {
return "Hello, " . $name . "!";
}
echo greet("Bob");
?>
5. 表单处理
通过超全局数组
"$_GET" 和
"$_POST" 获取用户提交的数据。
php
<!– form.html –>
<form method="post" action="process.php">
<input type="text" name="username">
<button type="submit">提交</button>
</form>
<!– process.php –>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
username = htmlspecialchars( _POST['username']); // 简单过滤
echo "Welcome, " . $username;
}
?>
6. 数据库操作
使用 MySQLi 扩展连接并操作 MySQL 数据库。
php
<?php
$conn = new mysqli("localhost", "root", "password", "test_db");
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$sql = "SELECT id, name FROM users";
result = conn->query($sql);
if ($result->num_rows > 0) {
while( row = result->fetch_assoc()) {
echo "ID: " . row["id"]. " – Name: " . row["name"]. "<br>";
}
} else {
echo "0 结果";
}
$conn->close();
?>
运行机制
1. 用户请求:浏览器向服务器请求一个
".php" 页面。
2. 服务器解析:Web 服务器(如 Apache/Nginx)将请求交给 PHP 引擎处理。
3. 代码执行:PHP 引擎执行脚本,可能连接数据库、处理业务逻辑等。
4. 生成结果:脚本执行完毕后,生成纯 HTML 内容。
5. 返回响应:Web 服务器将生成的 HTML 发送回用户的浏览器进行渲染。
核心组件
* Zend 引擎:PHP 的核心,负责将 PHP 代码编译为 opcode 并执行。
* OPcache:缓存 opcode,避免重复编译,显著提升性能。
* PHP-FPM:一个高效的 FastCGI 进程管理器,用于处理并发请求。
GET与POST
首先,一个最形象的比喻:
* GET 就像是在图书馆查书目录。你只是去获取信息,这个行为本身不会改变任何东西。
* POST 就像是向图书馆提交一份新书申请或借书单。你通过它来向系统提交数据,并希望系统能根据这些数据做出一些改变或处理。
核心区别对比表
特征 GET POST
主要用途 从服务器获取(查询)数据 向服务器提交(创建/更新)数据
数据位置 附加在 URL 之后 (Query String) 包含在 HTTP 请求体 (Body) 中
可见性 GET明文显示在地址栏,对用户可见且可被浏览器历史记录保存 对用户不可见,不 直接显示在地址栏
POST安全性 较低。因为数据暴露在 URL 中,不适合传输密码等敏感信息 相对较 高。敏感信息放在 Body 里更安全(注意:这不代表加密,HTTPS才是加密保障)
数据长度限制 GET 有 受限于浏览器和服务器对 URL 长度的限制(通常为几千个字符)
POST 理论上无 理论上可以发送非常大的数据包(取决于服务器的配置)
数据类型 GET 只允许 ASCII 字符,需要进行 URL 编码。
POST 没有限制。可以是二进制数据(如图片、文件)、文本等。
后退/刷新按钮 GET无害。浏览器通常会重新发起 GET 请求,不会提示用户。
POST有风险。浏览器会弹出一个警告,提示用户是否要重新提交表单,因为可 能会导致数据被再次处理。
书签/分享 可以将带参数的 URL 直接添加为书签或分享给他人。 不可以直接通过书签或分享 URL 来重现一次 POST 请求。
举例说明
1. GET 请求示例
当你在百度搜索 "PHP" 时,你的浏览器会向百度的服务器发送一个 GET 请求。
* URL 看起来像这样:
"https://www.baidu.com/s?wd=PHP"
* 发生了什么?
* 你在浏览器的地址栏可以看到完整的搜索词
"wd=PHP"。
* 你可以点击“刷新”按钮,重新进行这次搜索,没有任何问题。
* 你可以复制这个 URL 发给朋友,他们点开就能看到同样的搜索结果。
* 这是否符合预期? 完全符合!你只是想获取关于 "PHP" 的搜索结果,没有对服务器做任何更改。
2. POST 请求示例
当你在一个电商网站(如淘宝)上填写完收货信息并提交订单时,你的浏览器会向服务器发送一个 POST 请求。
* URL 看起来像这样:
"https://trade.taobao.com/trade/itemlist/list_buy.htm"(注意:URL 中没有包含你的姓名、地址等信息)
* 发生了什么?
* 你的收货地址、商品信息等数据被打包在了请求的 Body 里发送给了服务器。
* 浏览器地址栏看不到这些信息。
* 如果你提交订单后点击“刷新”,浏览器会弹出警告框:“确认重新提交表单吗?”,因为这可能会导致你下了两份一模一样的订单!
* 这是否符合预期? 完全符合!你是在创建一笔新的交易记录,这个行为改变了服务器的状态。
总结与最佳实践
选择 GET 当… 选择 POST 当…
从服务器获取数据(如加载一个页面、搜索、查看商品列表)。 向服务器提交数据(如登录、注册、发表评论、下订单、上传文件)。
数据不敏感,可以公开。 数据敏感,如密码、银行卡号。
需要书签或分享某个特定状态。 需要修改或创建服务器上的资源。
数据量很小,且是简单的文本。 数据量很大,或者是文件、图像等复杂数据。
重要提醒:
* 安全不是由 GET/POST 决定的,而是由 HTTPS 决定的。 使用 HTTPS 协议会对整个通信过程(包括 URL 和请求体)进行加密,从而保护数据安全。
* 不要仅依赖 GET 来“隐藏”敏感数据。 因为 URL 会被保存在服务器日志、浏览器历史记录、Referer 头中,这些地方都可能泄露数据。
* 永远不要将关键操作(如删除、支付)通过 GET 实现。 这非常危险,因为用户可能无意中触发了带有恶意链接的页面,或者搜索引擎爬虫访问了这些 URL。
理解并正确应用 GET 和 POST 是构建安全、可靠、符合规范的 Web 应用的基础。
好的,我们来详细讲解一下 PHP 中的各种运算符和常见的标签。
PHP中运算符
1. 算术运算符
用于基本的数学运算。
运算符 名称 描述 示例 结果
"+" 加法 左右操作数之和 "10 + 2" "12"
"-" 减法 左右操作数之差 "10 – 2" "8"
"*" 乘法 左右操作数之积 "10 * 2" "20"
"/" 除法 左操作数除以右操作数 "10 / 2" "5"
"%" 取模 左操作数除以右操作数的余数 "10 % 3" "1"
"**" 求幂 左操作数的右操作数次方 "2 ** 3" "8"
2. 赋值运算符
用于为变量赋值。
运算符 描述 等价于
"=" 最基本的赋值运算符 "$a = $b"
"+=" 加后再赋值 "$a += $b" → "$a = $a + $b"
"-=" 减后再赋值 "$a -= $b" → "$a = $a – $b"
"*=" 乘后再赋值 "$a *= $b" → "$a = $a * $b"
"/=" 除后再赋值 "$a /= $b" → "$a = $a / $b"
".=" 连接字符串后再赋值 "$a .= $b" → "$a = $a . $b"
"%=" 取模后再赋值 "$a %= $b" → "$a = $a % $b"
"**=" 求幂后再赋值 (PHP 5.6+) "$a **= $b" → "$a = $a ** $b"
3. 比较运算符
用于比较两个值,返回"true" 或 "false"。
运算符 名称 描述 示例 结果 (当 a=5, b=10)
"==" 等于 如果值相等则为真 "$a == $b" "false"
"===" 全等 如果值和类型都相等则为真 "$a === 5" "true"
"!="或 "<>" 不等于 如果值不相等则为真 "$a != $b" "true"
"!==" 不全等 如果值或类型不相等则为真 "$a !== '5' " "true"
">" 大于 如果左操作数大于右操作数则为真 "$a > $b" "false"
"<" 小于 如果左操作数小于右操作数则为真 "$a < $b" "true"
">=" 大于等于 如果左操作数不小于右操作数则为真 "$a >= 10" "false"
"<=" 小于等于 如果左操作数不大于右操作数则为真 "$a <= 5" "true"
"<=>" 太空船运算符 比较大小,左边大返回1,相等
返回0,右边大返回-1 "$a <=> $b" "-1"
4. 逻辑运算符
用于组合条件语句。
运算符 名称 描述 示例 结果 (当 a=true, b=false)
"and" 与 如果左右都为真则为真 "$a and $b" "false"
"or" 或 如果左右有一个为真则为真 "$a or $b" "true"
"xor" 异或 如果左右只有一个为真则为真 "$a xor $b" "true"
"!" 非 取反,如果为假则为真 "!$a" "false"
"&&" 与 与"and" 同,但优先级更高 "$a && $b" "false"
"\\|\\|" 或 与 "or" 同,但优先级更高 "$a \\|\\| $b" "true"
注意:
"and"/ "or" 的优先级低于 "=",而 "&&"/ "||" 的优先级高于 "="。
5. 递增/递减运算符
对变量进行 +1 或 -1 操作。
运算符 名称 描述 示例 (假设 $a=5)
"++$a" 前递增 先让 a 加 1,再返回 a 的值 "echo ++$a;" 输出 "6"
"$a++" 后递增 先返回 a 的值,再让 a 加 1 "echo $a++;" 输出 "5"
"–$a" 前递减 先让 a 减 1,再返回 a 的值 "echo –$a;" 输出 "4"
"$a–" 后递减 先返回 a 的值,再让 a 减 1 "echo $a–;" 输出 "5"
6. 字符串运算符
专门用于连接字符串。
运算符 名称 描述 示例 结果
"." 连接 将左右两个字符串连接起来 " "Hel" . "lo" " ""Hello""
".=" 连接赋值 将右边的字符串追加到左边的变量后面 "$str = "Hi"; $str .= " there!";"
"$str" 的值为""Hi there!""
7. 数组运算符
专门用于合并和操作数组。
运算符 名称
"+" 联合
描述
"$a + $b",返回一个包含了
"$a" 中所有元素和
"$b" 中所有元素的并集。
"$b" 中与
"$a" 键名相同的元素会被忽略。
"==" 相等
描述
"$a == $b",如果
"$a" 和
"$b" 具有相同的键/值对则为
"true"。
"===" 全等
描述
"$a === $b",如果
"$a" 和
"$b" 具有相同的键/值对并且顺序相同、类型相同则为
"true"。
"!=" 或
描述
"<>" 不相等
"$a != $b",如果
"$a" 不等于
"$b" 则为
"true"。
"!==" 不全等
描述
"$a !== $b",如果
"$a" 不全等于
"$b" 则为
"true"。
PHP 的常见标签
PHP 脚本需要用特殊的界定符包围起来,以便服务器识别哪部分是 PHP 代码。
1. 标准标签
这是最常用的写法,在所有版本的 PHP 中都可用。
<?php
// 这里是 PHP 代码
?>
2. 短标签
这是一种简短的写法,但依赖于服务器的配置(
"short_open_tag")。
<?
// 这里是 PHP 代码
?>
3. ASP 风格标签
模仿 ASP/JSP 风格的写法,同样依赖于服务器的配置(
"asp_tags")。
<%
// 这里是 PHP 代码
%>
4. HTML 脚本标签
一种兼容旧系统的写法。
<script language="php">
// 这里是 PHP 代码
</script>
建议
1. 首选标准标签 ("<?php ?>"):为了保证代码的可移植性和兼容性,强烈建议始终使用标准标签。避免使用短标签或 ASP 标签,因为你无法保证部署代码的服务器开启了相应配置。
2. 省略结束标签 ("?>"):当一个 PHP 文件只包含 PHP 代码(没有 HTML)或者在文件的末尾时,最佳实践是省略最后的结束标签 "?>"。这可以避免因意外的空格或换行导致的头部已发送错误 (Headers already sent)。
<?php
// … 一大堆 PHP 代码 …
// 这里什么都不写,不写 ?>
3. 合理使用运算符
* 在进行数值比较时,如果需要严格的类型和值都相同,请务必使用
"===" 和
"!=="。
* 对于复杂的逻辑判断,优先使用
"&&" 和
"||",因为它们比
"and"/
"or" 更直观且优先级不易出错。
* 在处理用户输入或不确定数据时,使用松散比较 (
"==") 时要格外小心。
网硕互联帮助中心




评论前必须登录!
注册