使用PHP在类内部获取错误

时间:2018-08-16 07:14:53

标签: php

使用PHP访问类内的变量时遇到以下错误。

  

错误:       注意:未定义的变量:第28行/var/www/oditek.in/subhra/database.php中的pdo
      致命错误:在第28行的/var/www/oditek.in/subhra/database.php中无法访问空属性

我在下面解释我的代码。

<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_DATABASE', 'spesh');
/**
* 
*/
class DBOperations
{

    private $pdo;
    function __construct()
    {
        $this->connect();
    }
    function __destruct() {
        // $this->close();
    }
    public function connect() {
        $dsn = "mysql:host=".DB_HOST.";dbname=".DB_DATABASE.";charset=utf8mb4";
        $options = [
          PDO::ATTR_EMULATE_PREPARES   => false, // turn off emulation mode for "real" prepared statements
          PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION, //turn on errors in the form of exceptions
          PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, //make the default fetch be an associative array
        ];
        try {
          $this->$pdo = new PDO($dsn, DB_USER, DB_PASSWORD, $options);
        } catch (Exception $e) {
          error_log($e->getMessage());
          exit('Something weird happened'); //something a user can understand
        }
    }
    public function db_insert($table,$values, $columns=array()){
        if($table=="" || $values==""){
            return false;
        }
        $columnstr=$valuestr="";
        $valprepArr="";
        if(count($columns)>0){
            $columnstr=implode(",", $columns);
            $columnstr="(".$columnstr.")";
        }
        foreach($values as $key=>$val){
            if($valuestr !=""){
                $valuestr.=",?";
            }else{
                $valuestr.="?";
            }
            array_push($valprepArr, $val);
        }
        $sql = "INSERT INTO ".$table." ".$columnstr." VALUES (".$valuestr.")";
        $stmt = $this->$pdo->prepare($sql);
        $stmt->execute($valprepArr);
        return $this->$pdo->lastInsertId();
        $stmt = null;
    }
}
?>

在类文件中,我遇到此错误,我想解决这个问题。

2 个答案:

答案 0 :(得分:2)

此行:

$this->$pdo = new PDO($dsn, DB_USER, DB_PASSWORD, $options);

应为:

 $this->pdo = new PDO($dsn, DB_USER, DB_PASSWORD, $options);

在您使用$this->$pdo的任何地方都应该是$this->pdo

更多信息here

答案 1 :(得分:0)

  

错误:注意:未定义的变量:pdo in   /var/www/oditek.in/subhra/database.php,第28行

解决方案:第28行$this->$pdo应该是$this->pdo

  

致命错误:无法访问中的空属性   /var/www/oditek.in/subhra/database.php,第28行

$this之后,需要调用在类中定义的属性或方法或函数,或者在其中创建$this对象的地方。