php中变量传递默认为值传递(字符串、数字等),加&为引用传递;对象是标识符的值传递,改属性影响原对象,重赋值不影响;调试用echo/var_dump或日志记录$_get、$_post及php://input。

直接在函数内外输出变量值,是最直观的测试方法。重点看调用后原始变量是否变化,就能判断是值传递还是引用传递。
用 echo 或 var_dump 对比前后值
写一个简单函数,传入变量,函数内修改它,再在外部打印原始变量:
- 如果外部变量没变 → 默认值传递(适用于字符串、数字、布尔、数组、null)
- 如果外部变量变了 → 引用传递(函数定义加 &,如 function foo(&$x))
示例:
$a = 10;<br>function change($x) { $x = 20; }<br>change($a);<br>echo $a; // 输出 10 → 值传递<br><br>$b = 10;<br>function changeRef(&$x) { $x = 20; }<br>changeRef($b);<br>echo $b; // 输出 20 → 引用传递对象参数要单独验证
对象默认按“引用语义”传递(实际是对象标识符的值传递),修改属性会影响原对象,但重赋值不会:
- $obj->prop = 'new'; → 外部能看见变化
- $obj = new StdClass(); → 外部对象不变(只是函数内指向了新对象)
想彻底隔离,需在函数内 clone $obj。
检查 $_GET、$_POST 等超全局变量
对 Web 请求参数,直接输出调试:
- var_dump($_GET); 看 URL 参数是否到达
- var_dump($_POST); 看表单数据是否提交成功
- JSON 请求要用 $input = file_get_contents('php://input'); 再 json_decode
配合浏览器 Network 面板或 Postman,确认请求头 Content-Type 和请求体格式匹配。
日志方式适合线上环境
不能直接输出时,写入日志文件记录参数状态:
$log = date('Y-m-d H:i:s') . ' - ' . print_r($_REQUEST, true) . "\n";<br>file_put_contents('param_debug.log', $log, FILE_APPEND);注意:$_REQUEST 不含 JSON 数据,需单独处理 php://input。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











