gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:54:05 27 4
gpt4 key购买 nike

我正在将一些模块添加到已经到位并且可以完美运行的 PHP 框架中。它支持多个数据库驱动程序。我正在查看主要的系统逻辑。
我注意到在主要的数据库驱动程序类构造函数之一中,它调用/实例化自身。我不会改变这段代码,但我很困惑为什么这不会导致无限的递归循环。
我查看了新的 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 的类, 而这:
$mysqli = @new \MySQLi(...)
指的是一个名为 \MySQLi的类.
第一个类引用(定义)没有前导黑斜线,所以它被放入当前命名空间的任何地方。第二个类引用(实例化)有一个前导反斜杠,它明确地将它放在根命名空间中。所以,你有两个同名的类,但它们在不同的命名空间中,因此是不同的类。

关于PHP 构造函数调用自身 - 不是递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65757515/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com