第一天就该让 echo 跑起来——先用 php -v 验证解释器,再用 php -s 启动内置服务器运行 index.php 输出 ok;务必开启 display_errors 查错,用 isset 或 ?? 避免 undefined index,foreach 修改原数组需加 & 引用。

别等“学完再写”,第一天就该让 echo 跑起来——环境没通、错误不显示、输入不校验,后面所有代码都在黑盒里运行。
怎么确认 PHP 真的能跑,而不是靠猜
很多人卡在第一步:浏览器打开是 404 或空白页,根本不知道问题出在哪。
- 先终端执行
php -v,看到类似PHP 8.2.12才算有解释器;如果报command not found,macOS 用brew install php,Windows 把官方 ZIP 解压后把路径加进PATH - 不用装 Apache/XAMPP 也能验证:新建
index.php,内容只有<?php echo 'OK'; ?>,然后终端运行php -S localhost:8000 - 浏览器访问
http://localhost:8000,看到 OK 就说明 PHP 解释器和内置服务器都正常——这是最轻量、最可控的起点 - 常见失败点:
php -S只能服务当前目录及子目录,文件放错位置(比如放在桌面却在项目根目录下执行命令)就会 404;Parse error多半是引号不配对或少分号,不是环境问题
$_GET 和 $_POST 直接用会报 Notice 的真实原因
写 echo $_GET['id']; 在 URL 没带 ?id=123 时触发 Notice: Undefined index,这不是警告,是 PHP 在告诉你“这个键根本不存在”。线上环境通常关了 display_errors,结果就是静默失败,逻辑断掉你还以为页面没问题。
- 永远用
isset($_GET['id'])包一层再取值,或者更简洁地用空合并操作符:$_GET['id'] ?? 'default' - 如果需要类型安全或过滤,直接上
filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT),它比$_GET更可靠,且默认返回null而不是触发 Notice -
$_POST同理,但要注意:表单method必须是post,且 PHP 文件得通过表单提交动作触发,不能直接浏览器打开——否则$_POST是空数组 - 调试时加一句
var_dump($_GET); die();,立刻看清传进来的是什么,避免靠脑补
数组遍历改值为什么总没效果
写 foreach ($arr as $value) { $value .= '!'; },原数组纹丝不动。因为 $value 是副本,不是引用。
- 要修改原数组元素,必须显式声明引用:
foreach ($arr as &$value) { $value .= '!'; } - 循环结束后务必
unset($value),否则后续代码中$value仍指向数组最后一个元素,可能引发意外覆盖 - 键名类型别预设:如果数组是
['name' => 'Alice'],$key就是字符串'name';如果是[0 => 'Alice'],$key就是整数0;用is_string($key)或is_int($key)判断更稳妥 - 定义数组统一用
[],别混用array(),不是语法错误,但在多人协作或读框架源码时容易造成认知摩擦
页面白了 / 报错消失了,该怎么找回错误信息
PHP 默认关闭错误显示,所以语法错、变量未定义、函数不存在,浏览器只给你一个空白页——这是新手最大障碍,不是你代码不行,是 PHP 把错误藏起来了。
- 临时方案:在 PHP 文件开头加两行:
ini_set('error_reporting', E_ALL); ini_set('display_errors', '1');,立刻让所有错误打出来 - 永久方案:找到
php.ini,设error_reporting = E_ALL和display_errors = On,重启 Apache 或内置服务器 - 注意
display_errors = Off是线上环境的安全要求,但开发阶段必须开;别依赖日志文件查错,开发期直接看屏幕输出效率最高 - 空白页也可能是
header()前有空格或 BOM,用编辑器转成 UTF-8 without BOM 再试
真正卡住人的从来不是语法多难,而是错误不反馈、输入不校验、变量不确认——把这三件事变成肌肉记忆,比背一百个函数名都管用。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











