有效PHP提示词需明确定义边界:声明PHP版本、运行环境、输入输出格式,用接口契约替代模糊描述,强制安全措施,善用反向提示修复错误,禁用@抑制符。

PHP 代码生成提示词必须带明确上下文和约束条件
直接让 AI “写个 PHP 函数”几乎必然产出不可用代码——缺环境、缺版本、缺依赖、缺错误处理。真正有效的提示词,本质是给 AI 搭建一个最小但完整的执行沙盒。
关键不是“描述功能”,而是“定义边界”:
-
PHP版本必须显式声明(如PHP 8.2+),否则 AI 可能用match表达式或enum(PHP 8.1才支持),导致低版本报错Fatal error: Uncaught Error: Undefined constant "match" - 必须说明运行环境:是
CLI脚本?Laravel控制器?还是原生Apache+mod_php?这决定能否用$_POST、是否要use命名空间、是否需考虑output buffering - 输入/输出格式要具体:比如“接收
$_GET['id'],校验为正整数,返回 JSON,失败时http_response_code(400)并输出{"error": "invalid_id"}”,而不是“返回错误信息”
避免“自然语言翻译”陷阱:把需求转成可验证的接口契约
AI 不理解“好代码”的模糊标准,但能严格遵循你写的接口契约。所谓“好”,在工程中就是:入参可控、出参确定、边界有兜底、错误可追踪。
例如,与其说“写个文件上传函数”,不如写:
立即学习“PHP免费学习笔记(深入)”;
写一个 PHP 函数 uploadAvatar($tmpFile, $targetDir, $maxSize = 2097152),要求: - 检查 $tmpFile 是否为合法上传临时文件(用 is_uploaded_file()) - 拒绝非 JPG/PNG 文件(用 finfo_file() 判断 MIME,不依赖扩展名) - 文件大小超 $maxSize 时抛出 InvalidArgumentException - 成功时返回绝对路径(如 /var/www/uploads/abc123.jpg),失败返回 false - 不调用 move_uploaded_file() 以外的 IO 函数
这样生成的代码才能直接进 Code Review,而不是先花半小时修命名、补类型声明、删调试 echo。
主动注入防御习惯,别等 AI 自己想起来
AI 默认不写防 SQL 注入、XSS、路径遍历——它按字面意思干活。你得把安全动作写进提示词,当成硬性步骤。
- 涉及数据库:必须写明“使用 PDO 预处理语句,参数用
?占位,禁止字符串拼接 SQL” - 输出到 HTML:必须写“对所有用户输入调用
htmlspecialchars($str, ENT_QUOTES, 'UTF-8')” - 文件路径拼接:必须写“用
dirname(__FILE__) . DIRECTORY_SEPARATOR . 'config.php',禁止直接拼'./config.php'” - 哪怕只是日志记录:也要加“敏感字段如 password、token 必须被掩码,例如
preg_replace('/token=[^&]+/', 'token=***', $url)”
调试阶段用“反向提示词”快速定位问题
当 AI 生成的代码跑出 Warning: Undefined array key "data" 或 Fatal error: Cannot declare class X because the name is already in use,别重写整个提示词。用反向提示快速修复:
把报错信息连同上下文代码块一起喂给 AI,并加指令:
以下 PHP 代码在 PHP 8.2 下报错:<code>Warning: Undefined array key "data"</code><pre class="brush:php;toolbar:false;"> $data = $_POST['data'];请只修改这一行,使其安全访问 $_POST['data'],并保持逻辑不变(即 $data 为 null 或原始值)。不要重写整个函数。
这种“单点手术式”提示,比“帮我重写这个函数”快 3 倍,且保留你已有的结构和注释。
最常被忽略的一点:PHP 的错误抑制符 @ 在现代项目里基本等于技术债。AI 很容易默认加 @file_get_contents() 来“避免警告”,但实际应该用 is_file() + is_readable() 显式判断——这点必须在提示词里堵死。



















