PHP 构造函数调用自身 - 不是递归

PHP Constructor Calling itself - Not Recurrsion

我正在向 PHP 框架添加一些模块,该框架已经到位并且运行良好。它支持多个数据库驱动程序。我在看主要的系统逻辑。

我注意到在一个主要的数据库驱动程序 class 构造函数中,它 calls/instantiates 本身。我不打算更改此代码,但我很困惑为什么这不会导致无限递归循环。

我查看了新的 PHP 命名空间和构造函数文档,但它并没有消除我的任何困惑。

框架的主要 MySQLi 驱动程序代码如下所示:

<?php

namespace SimFr\System\Library\DB;


class MySQLi {
    private $connection;

    public function __construct($hostname, $username, $password, $database, $port = '3306') {
        $mysqli = @new \MySQLi($hostname, $username, $password, $database, $port);

        if (!$mysqli->connect_error) {
            $this->connection = $mysqli;
            $this->connection->report_mode = MYSQLI_REPORT_ERROR;

        } else {
            throw new \Exception('MySQLi DB Failure');
        }
    }

... rest of class logic ...

我想知道在构造函数中,当它向变量 ($mysqli) 分配自身的对象时,它不会陷入递归循环。

我对命名空间的理解不准确吗?感谢您的理解。

Is my understanding of namespaces inaccurate?

是的,但由于命名问题,这有点棘手。这个:

namespace SimFr\System\Library\DB;
class MySQLi { ... }

创建一个名为 \SimFr\System\Library\DB\MySQLi 的 class,而这个:

$mysqli = @new \MySQLi(...)

指的是一个叫\MySQLi的class。

第一个 class 引用(定义)没有前导黑斜杠,因此它被放入当前名称空间的任何位置。第二个 class 引用(实例化)有一个前导反斜杠,明确地将它放在根命名空间中。所以,你有两个同名的 classes,但它们在不同的命名空间中,因此是不同的 classes.