无法访问PHP全局变量

时间:2015-03-17 17:28:43

标签: php

我试图拉动全局变量$ nsfw,但它根本没有显示任何内容。如果我在函数内回应它,它就可以了。但在外面,即使被定义为全球性,它也会失败。请帮助我。

 <?php    
    if(!function_exists('do_example_work'))
    {
        function do_example_work()
        {
            global $nsfw;

        include("includes/dbconnect.php");
// Create connection
$conn = new mysqli($DBHOST, $DBUSER, $DBPASS, $DBNAME);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
$sql = "SELECT fieldname FROM table WHERE name='$anything'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        if ($row["fieldname"] == 1) {
            // do somethin
            $nsfw = 25;
            exit();
        } else {
            echo "enjoy";
        }
    }
} else {
    echo "0 results";
}
            }
        echo $nsfw;
};


?>

3 个答案:

答案 0 :(得分:1)

变量名前面的关键字global表示变量是在函数外部的某处定义的,现在我想使用该变量。它不会生成全局变量。因此,您需要在函数外部定义变量,然后您可以使用前面的global关键字在函数内部使用该变量。 在你的代码中,我看不到你在函数之外定义变量。您只是在代码底部回显它。

答案 1 :(得分:1)

赞成和反对Globals。您可以搜索Stack和互联网并阅读:

  1. Globals在很多方面都很糟糕,应该尽可能避免
  2. 全球比赛并不差,如果你知道自己是什么,可以很好/安全使用 做

  3. 手册:
    http://php.net/manual/en/functions.user-defined.php

    使用这个基本的用户定义函数,你似乎已经过度复杂了。

    OUT

    如果您想获取某个功能的数据 ,只需使用 return 声明

    function do_example_work() {
    
      // Do some stuff here
      $nsfw = 25;
    
      return $nsfw; // Return where needed, in conditional statement or end of function
    
    }
    
    // Will echo "25"
    echo do_example_work();
    

    IN

    仅供参考:

    要从外部将数据导入函数,只需将数据作为参数从外部传递到函数中:

    function do_example_work($nsfw) {
    
    /** The var "$nsfw" will have whatever data you pass in through the function call
     * You can use it as required - check if $nsfw == something
     * Or it might be database login details (urgh)
     */
    
    echo $nsfw." - And words from in the function"; 
    
    }
    
    // Will echo "Pass in argument - And words from in the function"
    do_example_work("Pass in argument");
    

答案 2 :(得分:0)

将全局变量保留在方法中的任何特定原因??将它移到方法之外,它应该适用于你。

或者 尝试GLOBALS,如下所示。

function doit() { $GLOBALS['val'] = 'bar'; } doit(); echo $val;

输出为:

或者

<?php 
foo(); 
bar(); 

function foo() { global $jabberwocky; $jabberwocky="test data<br>"; bar(); } function bar() { global $jabberwocky; echo $jabberwocky; } ?>