什么时候__construct函数真的被调用了?

时间:2016-03-14 10:21:30

标签: php

我在starttutorial.com中看到了这样的代码:

class Database
{
    private static $dbName = 'crud_tutorial' ;
    private static $dbHost = 'localhost' ;
    private static $dbUsername = 'root';
    private static $dbUserPassword = 'root';

    private static $cont  = null;

    public function __construct() {
        die('Init function is not allowed');
    }
}
public static function connect()
{
   // One connection through whole application
   if ( null == self::$cont )
   {     
    try
    {
      self::$cont =  new PDO( "mysql:host=".self::$dbHost.";"."dbname=".self::$dbName, self::$dbUsername, self::$dbUserPassword);  
    }
    catch(PDOException $e)
    {
      die($e->getMessage()); 
    }
   }
   return self::$cont;
}

和包含此类的php文件中间的某个地方。我看到了这行代码。

$pdo = Database::connect();

据我所知,在实例化此类的实例时会调用__construct方法。我的问题是,上面的代码会调用魔术方法吗?

1 个答案:

答案 0 :(得分:1)

  

上面的代码会调用魔术方法吗?

否,因为__construct只会在类实例化期间调用,如下所示。

$db = new Database();

实例化一个类的时间是调用__construct()的时间。

通过将方法声明为static是您可以在不实例化数据库类的情况下使用该静态方法的时间,如

Database::connect()