【问题标题】:null variable in Php classPhp 类中的空变量
【发布时间】:2011-09-10 16:20:56
【问题描述】:

我是 php 的新手,所以我遇到了一个非常愚蠢的问题。我尝试编写有助于我使用 DB 的课程。代码在这里:

<?php
    class DbHelper{
        private $databaseURL;
        private $databaseUName;
        private $databasePWord;
        private $databaseName;
        private $nameOfDbWithWorkers;
        private $connection;

        function __construct($dbURL, $dbUserName, $dbPword, $dbName, $nameOfDbWithWorkers){
            $this->databaseURL = $dbURL;
            $this->databaseUName = $dbUserName;
            $this->databasePWord = $dbPword;
            $this->databaseName = $dbName;
            $this->nameOfDbWithWorkers = $nameOfDbWithWorkers;
        }

        function setConnectionToDb(){
            $connection = mysql_connect($this->databaseURL,$this->databaseUName,$this->databasePWord) OR DIE("can't connect to DB"); 
            mysql_select_db($this->databaseName, $connection)or die ("Error while connecting to database");
        }

        function getUser($login, $pass){
            $query = "SELECT type FROM $this->nameOfDbWithWorkers WHERE login = '$login' and password = '$pass';"; 
            $queryResult = $this->getDataFromDbByQuery($query);
            echo $queryResult;
            if ((mysql_affected_rows($connection) == 1)){
                $meta = mysql_fetch_assoc($queryResult);
                if ($meta['type']=='admin'){
                    return 'admin';
                }
                if ($meta['type']=='user'){
                    return 'user';
                }
                else{
                    return 'nomatch';
                }
            }
            else{               
                 return 'nomatch';
            }           
        }

        function getDataFromDbByQuery($query){
            $this->setConnectionToDb();
            $result = mysql_query($query);
            mysql_close($connection);
            return $result;
        }
}
?>

我调用了getUser 方法,但有一个问题 - 在getUser 方法和getDataFromDbByQuery 中的$connection = null。为什么这样?

【问题讨论】:

  • 你能提供调用代码吗?
  • 为什么要重新发明轮子?考虑使用 PDO
  • 嗯,我不知道 PDO。我会尝试使用它。谢谢)

标签: php oop class scope


【解决方案1】:

因为一个简单的变量总是局部的(除非你使用global 使它成为全局变量,但不要习惯这个;))。您可能正在寻找的是一个属性。您已经定义了private $connection,但只是在您的方法中使用$connection,您并没有使用它,而是尝试访问未定义的局部变量

    function setConnectionToDb(){
        $this->connection = mysql_connect($this->databaseURL,$this->databaseUName,$this->databasePWord) OR DIE("can't connect to DB"); 
        mysql_select_db($this->databaseName, $this->connection)or die ("Error while connecting to database");
    }

    //..
    function getUser($login, $pass){
        $query = "SELECT type FROM $this->nameOfDbWithWorkers WHERE login = '$login' and password = '$pass';"; 
        $queryResult = $this->getDataFromDbByQuery($query);
        echo $queryResult;
        if ((mysql_affected_rows($this->connection) == 1)){
            // ...
        }
    }

等等。只需将每个$connection 替换为$this-&gt;connection

【讨论】:

    【解决方案2】:

    尝试将$connection 替换为$this-&gt;connection

    $connection 指的是一个局部作用域 变量——即在您当前所在的函数之外不可用的变量。$this-&gt;connection 指的是您所在类的成员变量'已用private $connection 定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-17
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      相关资源
      最近更新 更多