【问题标题】:Sharing variables between functions [duplicate]在函数之间共享变量[重复]
【发布时间】:2015-01-09 20:59:50
【问题描述】:

我需要根据用户的状态显示不同的措辞。我意识到 while() 变量超出了 Online_Status() 的范围,但我无法弄清楚如何共享变量,甚至无法在 Online_Status() 中定义包含与 while() 相同信息的新变量。我已经尝试将 Online_Status() 放在 while()、while() 附近、while() 之外以及其他所有配置中几个小时。没有发生。我将不胜感激!

<?php

require_once('connect.php');


$con = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME) or die('Connection failed: ' . mysqli_connect_error());

$sql = mysqli_query($con, "SELECT UserType, Online, InChat FROM membership WHERE UserType = 2 ORDER BY Online DESC");


    while($row = mysqli_fetch_array($sql)){

    $UserType = $row['UserType'];
    $Online = $row['Online'];
    $InChat = $row['InChat'];


    echo Online_Status(); 


    }

    function Online_Status(){ 

        if ($Online == 0) {
            echo "I am not online. Please come back later";
        }

        else if($Online == 1 && $InChat == 0){
            echo "I am Online and I will be in my chatroom shortly.";
        }

        else if($Online == 1 && $InChat == 1){
            echo "I am Online chat with me now!";
        }

}

mysqli_close($con);
?> 

【问题讨论】:

    标签: php mysql function while-loop


    【解决方案1】:

    使用global关键字:

    function Online_Status(){ 
        global $Online;
        if ($Online == 0) {
            echo "I am not online. Please come back later";
        }
    
    }
    

    最好通过函数参数通过函数传递变量:

    function Online_Status($Online){ 
        if ($Online == 0) {
            echo "I am not online. Please come back later";
        }
    }
    

    并称它为:

    Online_Status($Online);
    

    另外,看看PHPVariable Scope

    【讨论】:

    • 通常认为使用全局变量是不好的做法,但这是一个有争议的问题,如果不学习将参数传递到方法中,您将无法在 PHP 中做很多事情,所以我强烈推荐使用阿里建议的第二种实现方式
    • 正是我想要的,谢谢。我快到了,我敢肯定我什么都试过了,除了那个。我现在就试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2020-03-14
    • 1970-01-01
    • 2017-03-27
    相关资源
    最近更新 更多