【问题标题】:when is the __construct function really called?__construct 函数何时真正被调用?
【发布时间】:2016-03-14 10:21:30
【问题描述】:

我在 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 方法。我的问题是,上面的代码会调用魔术方法吗?

【问题讨论】:

  • 如果在 connect() 方法中没有创建新的对象实例,则不会 - 本质上他们正在创建一个静态类:stackoverflow.com/questions/468642/…(可能这里的类示例是一个 sn-p)
  • connect() 方法在哪里?
  • 我的错,没有粘贴所有代码。现在完成编辑
  • 你试过代码了吗??我相信它会起作用,但最好的方法是尝试它:o)但回答你的间接问题 - 构造函数不会被调用。

标签: php


【解决方案1】:

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

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

$db = new Database();

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

通过将您的方法声明为静态是您可以使用该静态方法而无需实例化数据库类的时间

Database::connect()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    相关资源
    最近更新 更多