用PHP做网页,网页本质上就是网页让服务器在把HTML发给浏览器之前,先执行一段程序。网页这段程序可以查数据库、网页算逻辑、网页拼字符串,网页最后吐出一坨完整的网页HTML。浏览器根本不知道背后发生了什么,网页它只负责渲染。网页我第一份实习就是网页维护一个老论坛,整个站点的网页每个页面开头都是 <?php require 'header.php'; ?>,结尾是网页 <?php require 'footer.php'; ?>,中间塞满各种 if else。网页那会儿我才明白,网页动态网页的网页“动态”不是指动画,而是指内容能根据条件变。
举个例子。你打开一个电商网站的商品页,URL 是 product.php?id=1024。PHP 拿到这个 id,去 MySQL 里查 SELECT * FROM products WHERE id = 1024,然后把查到的名称、价格、库存拼进 HTML 模板里。如果库存是 0,就显示“已售罄”;如果大于 0,就显示“加入购物车”按钮。整个过程在几十毫秒内完成。你刷新一次,它就重新查一次。这跟静态 HTML 的区别在于:静态页面是死文件,PHP 页面是活的脚本。
写 PHP 网页最原始的方式叫“混编”。一个 .php 文件里既有 HTML 标签,又有 PHP 代码块。比如:
<ul> <?php foreach ($comments as $c): ?> <li><?php echo htmlspecialchars($c['content']); ?></li> <?php endforeach; ?> </ul> 这种写法现在被很多人嫌弃,说它脏。但说实话,小项目里它快得飞起。你不需要学模板引擎,不需要配路由,直接 FTP 上传就能跑。我见过一个日活几千的宠物社区,代码里全是这种混编,服务器是一台 1 核 1G 的阿里云最便宜机型,照样稳。当然,一旦逻辑复杂起来,这种写法就会变成意大利面条——你改一个按钮的颜色,得翻三个文件。
后来大家开始用框架,比如 Laravel、ThinkPHP。框架帮你做了路由、数据库抽象、模板引擎。你写 Route::get('/user/{ id}', 'UserController@show');,框架就把请求映射到控制器方法。模板里用 Blade 语法 @foreach ($users as $user),编译后还是 PHP。本质上没变,只是多了一层封装。好处是团队协作时,代码有地方放,不会乱。坏处是学习曲线陡,一个简单的留言板,用框架可能要写十几个文件。
我个人的判断:如果你只是想做个个人主页、小工具、或者给静态页面加个表单处理,直接用原生 PHP 混编最省事。别听那些人说“不用框架就是原始人”。工具是拿来解决问题的,不是拿来炫耀的。但如果你要做用户系统、支付、权限管理,那还是上框架。自己手写安全防护,十有八九会漏掉 CSRF 或者 SQL 注入。
还有一点容易被忽略:PHP 做网页,调试很重要。你写 echo $var; exit; 是最直接的断点。或者开 error_reporting(E_ALL); ini_set('display_errors', 1);,让错误直接打在页面上。别怕丑,开发阶段丑一点,上线前关掉就行。我见过有人用 var_dump 配合 die() 排查了一下午的数组问题,比装 Xdebug 还快。
最后说个具体场景。假设你要做一个“每日一句”的页面。数据库里存了 365 条句子。PHP 可以这样写:
<?php $pdo = new PDO('mysql:host=localhost;dbname=quotes', 'user', 'pass'); $day = date('z') + 1; // 一年中的第几天 $stmt = $pdo->prepare('SELECT content FROM daily WHERE day = ?'); $stmt->execute([$day]); $quote = $stmt->fetchColumn(); ?> <!DOCTYPE html> <html><body><h1><?php echo htmlspecialchars($quote); ?></h1></body></html> 就这么几行。没有框架,没有模板,没有依赖。浏览器访问一次,服务器查一次库,返回一次 HTML。干净利落。PHP 做网页的魅力就在这——它不优雅,但直接。你不需要理解什么“响应式编程”或者“虚拟 DOM”,你只需要知道:请求进来,代码执行,HTML 出去。剩下的,交给浏览器。