PDO,PHP:尝试实例化对象以调用函数-空白页

PDO,PHP:尝试实例化对象以调用函数-空白页,php,database,pdo,Php,Database,Pdo,所以我有两个文件涉及这个问题。其中一个是数据库类,另一个是文件,包含一次数据库文件,然后实例化该类的对象以调用函数--getDB();。 这就是问题所在 数据库类: <?php class Database { private static $datasource='mysql:host=localhost; dbname=db_name'; private static $username='root'; private static $

所以我有两个文件涉及这个问题。其中一个是数据库类,另一个是文件,
包含一次数据库文件,然后实例化该类的对象以调用函数--getDB();。
这就是问题所在

数据库类:

<?php
  class Database {           
    private static $datasource='mysql:host=localhost; dbname=db_name';
    private static $username='root';
    private static $password='root';
    private static $db;      

    private function __construct(){}

    public static function getDB(){ 
      if(!isset(self::$db)){ 
        try{
          self::$db=new PDO(self::$datasource,self::$username,self::$password); 
        }
        catch(PDOExceptin $e) {
          $error=$e->getMessage(); //variable $error can be used in the database_error.php file 
          //display database error file.  
          //include('database_error.php');
          exit();            
        }
      }
      return self::$db;      
    }

    function Database(){
      return new Database;
    }

  }

  ?>

在我的主文件中,我正在这样做:

 <?php
    include('partials/header.php'); 
    include_once('functions/pdo.php');

    $database = new Database();
    $getdb = $database->getDB();

    //Anything below won't show because of the failed instantiation of Database object above.
    //code..
 ?>

PDOException in
应该是
PDOException


此外,它还有助于在开发时打开显示错误并安装xdebug。

PDOExceptin
应该是
PDOException


此外,它还可以帮助打开显示错误并在开发时安装xdebug。

这里有一些错误(使用
ini\u集(“显示错误”,1);错误报告(-1);
查看所有错误消息):

PDO的异常类命名为
PDOException
,而不是
PDOExceptin

从非静态上下文调用静态函数:
$database->getDb()
,其中getDb是静态方法。(写入数据库::getDb()

编写
新数据库
,这将导致致命错误,因为构造函数是私有的(并且命名构造函数的优先级低于magic方法)。在那里使用:

$getdb = Database::Database(); // and declare your Database method as static

这里有一些错误(使用
ini\u集(“显示错误”,1);错误报告(-1);
查看所有错误消息):

PDO的异常类命名为
PDOException
,而不是
PDOExceptin

从非静态上下文调用静态函数:
$database->getDb()
,其中getDb是静态方法。(写入数据库::getDb()

编写
新数据库
,这将导致致命错误,因为构造函数是私有的(并且命名构造函数的优先级低于magic方法)。在那里使用:

$getdb = Database::Database(); // and declare your Database method as static
显然,我做错了什么

对。您编写的代码太多了。
编写的代码越多,错误就越多。所以,只要去掉所有无用的代码:

class Database {           
    private static $datasource='mysql:host=localhost; dbname=db_name';
    private static $username='root';
    private static $password='root';
    private static $db;      

    public static function getDB(){ 
      if(!isset(self::$db)){ 
          self::$db=new PDO(self::$datasource,self::$username,self::$password); 
      }
      return self::$db;      
    }
}
这么说吧

$db = Database::getDB();
显然,我做错了什么

对。您编写的代码太多了。
编写的代码越多,错误就越多。所以,只要去掉所有无用的代码:

class Database {           
    private static $datasource='mysql:host=localhost; dbname=db_name';
    private static $username='root';
    private static $password='root';
    private static $db;      

    public static function getDB(){ 
      if(!isset(self::$db)){ 
          self::$db=new PDO(self::$datasource,self::$username,self::$password); 
      }
      return self::$db;      
    }
}
这么说吧

$db = Database::getDB();

var_dump($e)退出之前…
var_dump($e)在退出之前…然后,有一天他将需要两个DB实例和。。。呵呵D@Denis两个数据库实例?为什么?有多个实例没有任何意义。。。(如果你不需要操作不同服务器的数据,这是一种非常罕见的情况)@bwoebi:这取决于你使用的应用程序、你正在做的事情、你是否决定通过分片数据库来扩展等@Denis yes,但是你会有一个真正的抽象层来检查做什么,你在静态数组中包含你的连接等等…然后,有一天他会需要两个DB实例和。。。呵呵D@Denis两个数据库实例?为什么?有多个实例没有任何意义。。。(如果你不需要操作不同服务器的数据,这是一种非常罕见的情况)@bwoebi:这取决于你使用的应用程序、你正在做的事情、你是否决定通过分片数据库来扩展等@Denis yes,但是你会有一个真正的抽象层,它会检查你在静态数组中包含连接时要做什么。。。。