PHP变量传入数组时为空,OneSignal用户专属通知遇故障
问题根源:PHP变量作用域限制
你遇到的这个问题其实是PHP里很常见的变量作用域问题——$my_variable定义在sendMessage()函数的外部,而PHP函数默认拥有独立的作用域,内部无法直接访问外部的变量,所以当你在$fields数组里尝试使用它时,它会被视为未定义的变量,值自然就是null了。
你之前在函数外部echo $my_variable能正常输出,是因为那时候变量处于当前的全局/局部作用域内,和函数内部的作用域是相互独立的。
修复方案(两种可选)
方案1:使用global关键字声明变量(快速但不推荐)
在sendMessage()函数内部,先声明要使用外部的$my_variable,这样函数就能访问到它:
<?php if(isset($_POST["sub"])) { $my_variable= $_POST["t1"]; $SQL = "some sql here"; if (mysqli_query($db, $SQL)) { echo $my_variable; echo "<br>"; function sendMessage(){ global $my_variable; // 声明使用外部全局变量 $content = array( "en" => 'test message' ); $fields = array( 'app_id' => "5b0eacfc-3ac8-4dc6-891b-xxxxx", // 现在可以正常使用$my_variable了 'target_field' => $my_variable // 其他字段... ); // 后续发送逻辑... } sendMessage(); // 记得调用函数触发发送 } }
方案2:将变量作为参数传递给函数(推荐,更规范)
这种方式避免了全局变量的耦合问题,代码更清晰可维护,也是PHP开发的最佳实践之一:
<?php if(isset($_POST["sub"])) { $my_variable= $_POST["t1"]; $SQL = "some sql here"; if (mysqli_query($db, $SQL)) { echo $my_variable; echo "<br>"; // 给函数添加参数接收外部变量 function sendMessage($userVar){ $content = array( "en" => 'test message' ); $fields = array( 'app_id' => "5b0eacfc-3ac8-4dc6-891b-xxxxx", 'target_field' => $userVar // 使用传入的参数 // 其他字段... ); // 后续发送逻辑... } sendMessage($my_variable); // 调用时传入变量 } }
额外提醒:你原来的代码里只定义了sendMessage()函数但没有调用它,记得要在合适的位置调用函数才能执行实际的发送逻辑哦。
内容的提问来源于stack exchange,提问作者PBSDR
相关产品推荐
相关产品推荐

