You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:23:05