自定义validate_date函数报错:未定义变量date问题求助
解决PHP自定义日期验证函数中的“未定义变量:date”错误
嘿,这个问题其实很好解决——你碰到了PHP里变量作用域的经典坑!
你看,你写的validate_date函数里用了$date变量,但这个变量是在函数外面定义的,而PHP的函数有自己独立的作用域,内部默认看不到外部的变量。你函数的参数明明是$date_string,结果在函数里却去调用不存在的$date,这不就报“未定义变量”了嘛。
直接给你修正后的代码,关键改了函数内部的变量引用:
if($_SERVER['REQUEST_METHOD'] === 'POST'){ $date = trim($_POST['date']); $email = trim($_POST['email']); $description = trim($_POST['desc']); function validate_date($date_string) { // 这里要使用函数的参数$date_string,而不是外部的$date if ($time = strtotime($date_string)) { return '<p>Date: ' . date('F jS Y', $time) . '</p>'; } else { return '<p>' . $date_string . ' does not look valid.</p>'; } } if (!empty($date) && !empty($email) && !empty($description)) { echo validate_date($date); if (filter_var($email, FILTER_VALIDATE_EMAIL)) { echo "<p>Email: $email</p>"; } echo '<p>' . strip_tags($description) . '</p>'; } }
关键修改点说明:
- 把函数内的
strtotime($date)改成strtotime($date_string),用函数自己的参数来接收外部传入的日期值,这是最规范的做法 - 我还给返回值加了
<p>标签,和你原代码的输出格式保持一致,这样页面显示会更整齐
顺便提一句:PHP函数不会自动继承外部的变量,如果你非要用外部变量,虽然可以用global关键字,但那会让代码耦合度变高,容易出奇怪的bug,所以传参永远是最优解。
内容的提问来源于stack exchange,提问作者gentyspun
相关产品推荐
相关产品推荐

