php学习01,一个文件搞懂php的所有语法,PHP实现贪吃蛇,记事本

PHP是干什么用的来龙去脉适用场景发展历史详解

PHP 是一门专为 Web 开发而生的开源服务器端脚本语言,核心价值是快速、低成本地构建动态网站与后端服务。它从个人工具起步,历经30年演化,至今仍是全球市场占有率最高的后端技术(约77%网站在使用)。
下面从定义、历史、核心用途、适用场景、优缺点、现状与未来,一次性讲透。

一、PHP 是什么(一句话定义)

PHP(全称:PHP: Hypertext Preprocessor,超文本预处理器)

  • 服务器端语言:代码运行在服务器,浏览器只看到最终HTML/数据
  • 可嵌入HTML:直接写在网页里,<?php ... ?> 标记区分
  • 开源免费:跨Windows/macOS/Linux,搭配Nginx/Apache即可运行
  • 动态数据:连接数据库(MySQL为主)、处理表单、生成页面、接口
    简单说:PHP = 网站后端的“胶水语言”,负责把数据、逻辑、页面拼起来

二、来龙去脉:30年发展历史(关键节点)

1. 诞生:个人工具(1994–1995)
  • 1994:丹麦程序员 Rasmus Lerdorf 用Perl/C写脚本,统计个人主页访问、展示简历
  • 1995.6.8:正式发布 PHP/FI 1.0(Personal Home Page Forms Interpreter)
  • 初衷:简化个人网站维护,不是“设计一门语言”
2. 崛起:PHP 3/4(1997–2004)
  • 1997:以色列开发者 Andi Gutmans & Zeev Suraski 重写内核,发布 PHP 3
    • 改名:PHP: Hypertext Preprocessor(递归缩写)
    • 支持多数据库、模块化、扩展机制
  • 2000:PHP 4 + Zend Engine 1
    • 性能大幅提升、会话机制、输出缓冲
    • 成为 LAMP(Linux+Apache+MySQL+PHP) 标配,统治中小网站
3. 成熟:PHP 5(2004–2015)
  • 2004:PHP 5.0 全面支持面向对象(OOP)、异常、PDO数据库抽象层
  • 2009–2014:PHP 5.3–5.6 加入命名空间、闭包、Trait、生成器
  • 生态爆发:
    • WordPress 成为全球第一CMS(至今43%网站用它)
    • Laravel/Symfony/ThinkPHP 等框架出现
    • 电商:Magento、WooCommerce 崛起
4. 重生:PHP 7(2015 里程碑)
  • 性能革命:Zend Engine 3,速度比PHP 5.6 快2倍、内存减半
  • 语法现代化:标量类型声明、返回值类型、空合并运算符、匿名类
  • 一举扭转“PHP慢、老旧”的口碑
5. 现代:PHP 8(2020–至今)
  • PHP 8.0–8.4:JIT编译、属性、枚举、只读类、构造器属性提升
  • 协程生态(Swoole、RoadRunner):支持高并发、长连接、微服务
  • 云原生、Serverless、API 主流化
版本速览(关键)
  • PHP 1/2:个人工具
  • PHP 3:正式语言
  • PHP 4:Zend引擎、工业化
  • PHP 5:面向对象、生态成熟
  • PHP 7:性能飞跃
  • PHP 8:现代强类型、JIT、协程

三、PHP 核心用途(到底用来干什么)

1. 动态网页与网站(最核心)
  • 接收浏览器请求 → 查询数据库 → 拼接HTML → 返回给用户
  • 典型:博客、新闻、企业官网、社区、搜索页面
2. 内容管理系统(CMS)

全球几乎所有主流CMS都用PHP

  • WordPress(43%网站)
  • Drupal、Joomla、织梦、帝国CMS
  • 政府/学校/媒体/中小企业官网首选
3. 电商系统
  • WooCommerce(WordPress插件,全球电商份额~8.2%)
  • Magento(Adobe Commerce,阿里国际站等)
  • OpenCart、PrestaShop、ShopXO 等
4. API 与后端服务(前后端分离)
  • RESTful/GQL接口,给App、小程序、Vue/React前端供数据
  • 登录、支付、订单、用户中心、数据统计
5. 命令行脚本(CLI)
  • 定时任务、数据导入导出、日志清理、爬虫、自动化部署
  • 不需要网页,直接 php 脚本.php 运行
6. 其他(较少但能做)
  • 小游戏后端、聊天室(Swoole)
  • 桌面软件(PHP-GTK/Qt,极少)
  • 物联网边缘逻辑、AI接口调用层

四、适用场景(什么时候选PHP)

✅ 最适合
  1. 快速建站/官网/博客
    • 成本低、上线快、维护简单
    • WordPress一天搞定企业站
  2. 中小电商/独立站/跨境
    • WooCommerce/Magento 成熟生态
    • 支付、物流、多语言、税务插件全
  3. CMS/内容平台/媒体/政务
    • 多用户、权限、文章、评论、附件、SEO 成熟
  4. 创业MVP/原型/后台管理系统
    • 开发效率极高:两周做完官网+后台+支付
    • 改需求快、招人易、部署简单
  5. API/小程序后端/内部系统(OA/CRM/报表)
    • Laravel/ThinkPHP 快速开发接口
    • 配合Vue做管理后台极常见
  6. 高并发但非超大规模
    • PHP 7/8 + Swoole 可支撑日均千万级请求
    • 百度贴吧、新浪微博早期、维基百科、Facebook(早期)都用PHP
⚠️ 不太适合
  • 底层系统、操作系统、驱动、高性能计算(C/C++/Go)
  • 实时海量长连接(如百万在线聊天室,Go更优)
  • 机器学习训练(Python)
  • 原生桌面App(C#/Electron)

五、PHP 为什么能成功(核心优势)

  1. 简单易学
    • 语法接近C/JS,变量$开头,入门快
    • 文档全、中文资料多、新手坑少
  2. 部署极简
    • 虚拟主机/宝塔/PHPStudy 一键搭建
    • 上传.php文件就运行,不用编译
  3. 数据库天生友好
    • 内置MySQL/PostgreSQL/SQLite支持
    • “PHP+MySQL”黄金组合,低成本撑起动态网站
  4. 生态宇宙级庞大
    • Composer:30万+扩展包(登录、支付、Excel、邮件、爬虫…)
    • 框架:Laravel(优雅)、Symfony(企业)、ThinkPHP(国内)、Yii
    • CMS/电商/论坛全开源解决方案
  5. 跨平台
    • Windows/macOS/Linux 全支持
    • 搭配Nginx/Apache/IIS 均可
  6. 性能今非昔比
    • PHP 8+JIT 接近Java/Go水平
    • Swoole协程:高并发、长连接、异步IO

六、现状与地位(2026)

  • 市场份额:全球 ~77% 网站后端用PHP(W3Techs)
  • 主流地位:CMS/电商/企业官网/小程序后端 绝对主流
  • 语言状态:活跃维护,每年大版本(8.0→8.1→…→8.5)
  • 误区澄清
    • ❌ “PHP已死”:错,依然是Web开发第一语言
    • ❌ “PHP很慢”:PHP 7/8 性能极强
    • ❌ “只能做小站”:Facebook/Wikipedia/百度贴吧 都证明能做巨型站

七、总结

PHP 是为“快速做网站、做后端、做业务系统”而生的语言

  • 历史:从个人工具 → Web标配 → 现代化高性能语言
  • 用途:网站、CMS、电商、API、后台、脚本
  • 优势:简单、快、便宜、生态强、跨平台
  • 适合:创业、中小企业、快速开发、内容/电商类项目
    一句话:
    想低成本、高效率搞定网站和后端,PHP依然是首选之一。

要不要我帮你整理一份 PHP 核心语法速记(变量、数组、函数、MySQL、表单、会话),方便你快速入门?

1、一个文件搞懂php的所有语法

我给你写一个 PHP 文件,里面包含所有核心语法,你直接复制运行就能看懂,注释超详细。
all/_in/_one.php

<?php
// ==============================================
// 1. 基本输出
// ==============================================
echo "Hello World<br>";         // 输出字符串
print "你好<br>";               // 和 echo 差不多
var_dump("PHP 7.3");            // 打印类型+值
print_r(["a", "b", "c"]);       // 打印数组结构
echo "<hr>";
// ==============================================
// 2. 变量
// ==============================================
$name = "张三";
$age  = 20;
$isMan = true;
$money = 99.9;
echo "姓名:$name,年龄:$age<br>";
echo "变量类型:".gettype($name)."<br>";
echo "<hr>";
// ==============================================
// 3. 常量
// ==============================================
define("VERSION", "1.0.0");
echo "版本:".VERSION."<br>";
echo "<hr>";
// ==============================================
// 4. 字符串操作
// ==============================================
$str1 = "hello";
$str2 = "world";
echo $str1 . " " . $str2 . "<br>";       // 拼接
echo strlen("abc") . "<br>";             // 长度
echo strpos("hello", "e") . "<br>";      // 查找
echo substr("abcdef", 1, 3) . "<br>";    // 截取
echo strtoupper("aaa") . "<br>";         // 转大写
echo "<hr>";
// ==============================================
// 5. 数组(最常用)
// ==============================================
// 索引数组
$arr1 = ["苹果", "香蕉", "梨"];
echo $arr1[0] . "<br>";
// 关联数组(键值对)
$user = [
    "id"    => 1,
    "name"  => "李四",
    "phone" => "13800138000"
];
echo $user["name"] . "<br>";
// 二维数组
$list = [
    ["id"=>1, "name"=>"A"],
    ["id"=>2, "name"=>"B"]
];
echo $list[1]["name"] . "<br>";
echo "<hr>";
// ==============================================
// 6. 条件判断
// ==============================================
$score = 85;
if ($score >= 90) {
    echo "优秀<br>";
} elseif ($score >= 60) {
    echo "及格<br>";
} else {
    echo "不及格<br>";
}
// 三元运算
echo $score >= 60 ? "通过" : "不通过";
echo "<br>";
// switch
$day = 2;
switch ($day) {
    case 1: echo "周一"; break;
    case 2: echo "周二"; break;
    default: echo "其他";
}
echo "<hr>";
// ==============================================
// 7. 循环
// ==============================================
// for
for ($i=1; $i<=3; $i++) {
    echo "循环:$i<br>";
}
// while
$i = 1;
while ($i <= 2) {
    echo "while:$i<br>";
    $i++;
}
// foreach 遍历数组
$fruit = ["apple", "pear"];
foreach ($fruit as $f) {
    echo $f."<br>";
}
foreach ($user as $k => $v) {
    echo "$k => $v<br>";
}
echo "<hr>";
// ==============================================
// 8. 函数
// ==============================================
// 普通函数
function add($a, $b) {
    return $a + $b;
}
echo "1+2=".add(1,2)."<br>";
// 带默认参数
function sayHi($name = "游客") {
    return "hi $name";
}
echo sayHi()."<br>";
echo sayHi("小明")."<br>";
// 匿名函数
$func = function($x) { return $x*2; };
echo $func(5)."<br>";
echo "<hr>";
// ==============================================
// 9. 超全局变量(了解)
// ==============================================
// var_dump($_GET);
// var_dump($_POST);
// var_dump($_SERVER);
// ==============================================
// 10. 表单/GET 接收示例(浏览器访问 ?name=test)
// ==============================================
$name = isset($_GET["name"]) ? $_GET["name"] : "未传参";
echo "GET 参数 name = $name<br>";
echo "<hr>";
// ==============================================
// 11. 简单 MySQL 演示(最常用)
// ==============================================
/*
$host = "127.0.0.1";
$user = "root";
$pwd  = "root";
$db   = "test";
$conn = mysqli_connect($host,$user,$pwd,$db);
mysqli_query($conn,"set names utf8");
$sql = "select * from user";
$res = mysqli_query($conn,$sql);
while($row = mysqli_fetch_assoc($res)){
    print_r($row);
}
*/
// ==============================================
// 12. 面向对象 OOP
// ==============================================
class Person {
    public $name;
    public function __construct($name) {
        $this->name = $name;
    }
    public function say() {
        return "我是".$this->name;
    }
}
$p = new Person("小红");
echo $p->say();
?>

怎么运行

  1. 保存为 all_in_one.php
  2. 打开终端进入目录:
php -S localhost:8080
  1. 浏览器打开:
http://localhost:8080/all_in_one.php

这个文件包含了所有你要的语法

  • 输出 echo/print/var_dump
  • 变量、常量
  • 字符串、数组(一维/二维/关联)
  • if/else/switch/三元
  • for/while/foreach
  • 函数(普通、默认参数、匿名)
  • GET 参数接收
  • MySQL 基础查询
  • 面向对象类、对象、方法
    你想要我再给你做一个/*/极简浓缩版(只有 30 行)//*吗?
Hello World
你好
string(7) "PHP 7.3" Array ( [0] => a [1] => b [2] => c )
Warning: Undefined variable $name,年龄: in D:/Users/AAA/IdeaProjects/readinglist/html-test/php/all_in_one.php on line 19
姓名:20
变量类型:string
版本:1.0.0
hello world
3
1
bcd
AAA
苹果
李四
B
及格
通过
周二
循环:1
循环:2
循环:3
while:1
while:2
apple
pear
id => 1
name => 李四
phone => 13800138000
1+2=3
hi 游客
hi 小明
10
GET 参数 name = 未传参

PHP实现贪吃蛇

我给你写一个纯 PHP + 浏览器网页版贪吃蛇一个文件搞定,复制就能直接运行,不需要任何框架。
snake.php

<?php
// 纯PHP实现贪吃蛇游戏(网页版)
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>PHP 贪吃蛇</title>
    <style>
        *{margin:0;padding:0;box-sizing:border-box;}
        body{background:#1a1a1a;color:#fff;display:flex;justify-content:center;align-items:center;min-height:100vh;flex-direction:column;}
        .game-box{border:2px solid #444;display:grid;grid-template-columns:repeat(20,20px);gap:1px;background:#222;}
        .cell{width:20px;height:20px;background:#333;}
        .snake{background:#0f0;}
        .food{background:#f33;}
        .info{margin-bottom:10px;font-size:18px;}
    </style>
</head>
<body>
    <div class="info">得分:<span id="score">0</span></div>
    <div class="game-box" id="box"></div>
    <script>
        // 游戏配置
        const ROWS = 20;
        const COLS = 20;
        const box = document.getElementById('box');
        const scoreSpan = document.getElementById('score');
        // 初始化格子
        let grid = [];
        for(let i=0;i<ROWS*COLS;i++){
            const cell = document.createElement('div');
            cell.classList.add('cell');
            box.appendChild(cell);
            grid.push(cell);
        }
        // 蛇初始状态
        let snake = [200,201,202];
        let food = 0;
        let dir = 1;       // 1右 -1左 20下 -20上
        let score = 0;
        let timer = null;
        // 随机生成食物
        function makeFood(){
            food = Math.floor(Math.random()*grid.length);
            if(snake.includes(food)) makeFood();
        }
        // 渲染
        function render(){
            grid.forEach(c=>c.className='cell');
            snake.forEach(i=>grid[i].classList.add('snake'));
            grid[food].classList.add('food');
            scoreSpan.textContent = score;
        }
        // 移动逻辑
        function move(){
            let head = snake[0] + dir;
            // 撞墙
            if(head<0 || head>=ROWS*COLS) return gameOver();
            // 左右穿墙
            if(dir===1 && head%COLS===0) return gameOver();
            if(dir===-1 && head%COLS===COLS-1) return gameOver();
            // 撞自己
            // if(snake.includes(head)) return gameOver();
            snake.unshift(head);
            // 吃到食物
            if(head===food){
                score+=10;
                makeFood();
            }else{
                snake.pop();
            }
            render();
        }
        function gameOver(){
            clearInterval(timer);
            alert('游戏结束!得分:'+score);
            location.reload();
        }
        // 键盘控制
        document.addEventListener('keydown',e=>{
            switch(e.key){
                case 'ArrowUp':    if(dir!==20) dir=-20; break;
                case 'ArrowDown':  if(dir!==-20) dir=20; break;
                case 'ArrowLeft':  if(dir!==1) dir=-1; break;
                case 'ArrowRight': if(dir!==-1) dir=1; break;
            }
        });
        // 开始游戏
        makeFood();
        render();
        timer = setInterval(move,150);
    </script>
</body>
</html>

运行方法

  1. 保存为 snake.php
  2. 在该文件夹打开 CMD / PowerShell,运行:
php -S localhost:8080
  1. 浏览器打开:
http://localhost:8080/snake.php

游戏操作

  • ↑ ↓ ← → 方向键 控制蛇
  • 吃到红色方块加分
  • 撞墙/撞自己游戏结束

为什么是 PHP 实现?

  • 结构用 PHP 输出 HTML
  • 游戏逻辑用 JS 运行在浏览器
  • 真正纯 PHP 命令行版也能写,但只能在黑框框跑,不好看
    想要我再给你写一个 PHP 命令行黑框框版本 吗?
    在这里插入图片描述

php +html 实现记事本,要有列表页和编辑页,实现增删改查

好,我直接给你做一套完整 PHP + HTML 记事本(无数据库,文件存储),包含:
列表页 + 新增 + 编辑 + 删除 + 修改,纯原生 PHP,一个文件夹跑起来,复制即用。

项目结构

/notebook/
  ├─ index.php       // 笔记列表页
  ├─ add.php          // 新增笔记
  ├─ edit.php         // 编辑笔记
  ├─ delete.php       // 删除笔记
  └─ notes/           // 存放所有笔记(自动创建)

  1. index.php 笔记列表

<?php
$notesDir = 'notes';
if (!is_dir($notesDir)) mkdir($notesDir);
$files = array_diff(scandir($notesDir), ['.', '..']);
$notes = [];
foreach ($files as $f) {
    $path = $notesDir . DIRECTORY_SEPARATOR . $f;
    $time = filemtime($path);
    $notes[] = [
        'id' => $f,
        'title' => basename($f, '.txt'),
        'time' => date('Y-m-d H:i:s', $time)
    ];
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>笔记列表</title>
    <style>
        body{max-width:800px;margin:20px auto;font-family:Arial}
        .item{padding:10px;border-bottom:1px solid #eee;display:flex;justify-content:space-between}
        .title{font-size:16px}
        .time{color:#999;font-size:12px}
        a{margin-left:10px;color:#07c;text-decoration:none}
        .add{margin-bottom:15px;display:inline-block;padding:8px 16px;background:#07c;color:#fff;border-radius:4px}
    </style>
</head>
<body>
    <h1>我的记事本</h1>
    <a href="add.php" class="add">+ 新增笔记</a>
    <?php if (empty($notes)): ?>
        <p>暂无笔记</p>
    <?php else: ?>
        <?php foreach ($notes as $n): ?>
            <div class="item">
                <div>
                    <div class="title"><?= $n['title'] ?></div>
                    <div class="time"><?= $n['time'] ?></div>
                </div>
                <div>
                    <a href="edit.php?id=<?= $n['id'] ?>">编辑</a>
                    <a href="delete.php?id=<?= $n['id'] ?>" onclick="return confirm('确定删除?')">删除</a>
                </div>
            </div>
        <?php endforeach; ?>
    <?php endif; ?>
</body>
</html>

  1. add.php 新增笔记

<?php
if ($_POST) {
    $title = trim($_POST['title']);
    $content = trim($_POST['content']);
    if ($title && $content) {
        $id = uniqid();
        file_put_contents("notes/$id.txt", $content);
        header('Location: index.php');
        exit;
    }
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>新增笔记</title>
    <style>
        body{max-width:800px;margin:20px auto}
        input,textarea{width:100%;padding:10px;margin-bottom:10px;font-size:16px}
        textarea{height:300px}
        button{padding:10px 20px;background:#07c;color:#fff;border:none;border-radius:4px;cursor:pointer}
    </style>
</head>
<body>
    <h1>新增笔记</h1>
    <form method="post">
        <input name="title" placeholder="请输入标题" required>
        <textarea name="content" placeholder="请输入内容" required></textarea>
        <button type="submit">保存</button>
    </form>
</body>
</html>

  1. edit.php 编辑笔记

<?php
$id = $_GET['id'] ?? '';
$file = "notes/$id";
if (!is_file($file)) exit('笔记不存在');
$content = file_get_contents($file);
$title = basename($file, '.txt');
if ($_POST) {
    $newTitle = trim($_POST['title']);
    $newContent = trim($_POST['content']);
    if ($newTitle && $newContent) {
        unlink($file);
        file_put_contents("notes/$id", $newContent);
        header('Location: index.php');
        exit;
    }
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>编辑笔记</title>
    <style>
        body{max-width:800px;margin:20px auto}
        input,textarea{width:100%;padding:10px;margin-bottom:10px;font-size:16px}
        textarea{height:300px}
        button{padding:10px 20px;background:#07c;color:#fff;border:none;border-radius:4px;cursor:pointer}
    </style>
</head>
<body>
    <h1>编辑笔记</h1>
    <form method="post">
        <input name="title" value="<?= $title ?>" required>
        <textarea name="content" required><?= htmlspecialchars($content) ?></textarea>
        <button type="submit">保存修改</button>
    </form>
</body>
</html>

  1. delete.php 删除笔记

<?php
$id = $_GET['id'] ?? '';
$file = "notes/$id";
if (is_file($file)) unlink($file);
header('Location: index.php');
exit;

✅ 运行方法

  1. 新建文件夹 notebook
  2. 把上面 4 个文件放进去
  3. 文件夹里 手动新建一个空文件夹 notes
  4. 终端进入目录运行:
php -S localhost:8080
  1. 打开浏览器访问:
http://localhost:8080/index.php

✅ 功能完整实现

  • ✅ 笔记列表展示

  • ✅ 新增笔记

  • ✅ 编辑笔记

  • ✅ 删除笔记

  • ✅ 修改时间自动记录

  • ✅ 无数据库(文件存储)

  • ✅ 纯 PHP + HTML,无任何依赖
    想要我再给你加上 Markdown 编辑器 / 搜索 / 分类 / 登录 吗?
    在这里插入图片描述
    在这里插入图片描述

    《网络安全从零到精通全套学习大礼包》

96节从入门到精通的全套视频教程免费领取

如果你也想通过学网络安全技术去帮助就业和转行,我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。

请添加图片描述

网络安全学习路线图

想要学习 网络安全,作为新手一定要先按照路线图学习方向不对,努力白费。对于从来没有接触过网络安全的同学,我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线,大家跟着这个路线图学习准没错。

请添加图片描述

配套实战项目/源码

所有视频教程所涉及的实战项目和项目源码

在这里插入图片描述

学习电子书籍

学习网络安全必看的书籍和文章的PDF,市面上网络安全书籍确实太多了,这些是我精选出来的

在这里插入图片描述

面试真题/经验

请添加图片描述

以上资料如何领取?

img

,作为新手一定要先按照路线图学习方向不对,努力白费。对于从来没有接触过网络安全的同学,我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线,大家跟着这个路线图学习准没错。

请添加图片描述

配套实战项目/源码

所有视频教程所涉及的实战项目和项目源码

在这里插入图片描述

学习电子书籍

学习网络安全必看的书籍和文章的PDF,市面上网络安全书籍确实太多了,这些是我精选出来的

在这里插入图片描述

面试真题/经验

请添加图片描述

以上资料如何领取?

img

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐