1

我只是学习OOP的新手。到目前为止,我已经阅读了很多文章并尝试了一些教程。我只是想知道为什么在构造函数上声明参数时某些值应该为空。

    function __construct($hostname = NULL, $username = NULL, $password = NULL, $database = NULL)
    {
        $this->hostname = !empty($hostname) ? $hostname : "";
        $this->username = !empty($username) ? $username : "";
        $this->password = !empty($password) ? $password : "";
        $this->database = !empty($database) ? $database : "";
    }

像这样。我真的很想知道。

4

4 回答 4

2

我只是想知道为什么在构造函数上声明参数时某些值应该为空。

这些不需要被清空。

它们作为参数的默认值被清空。例如对于您在示例中给出的函数,可以通过以下五种方式之一调用:

  1. 没有争论
  2. 使用 $hostname
  3. 使用 $hostname, $username
  4. 使用 $hostname、$username、$password
  5. 使用 $hostname、$username、$password、$database

需要注意的是,不能使用 $hostname、$password 调用函数并让函数假定默认值 $username。

于 2012-07-27T05:50:52.613 回答
2

即使在函数调用期间未传递所有参数,将参数保持为 NULL 也会使函数运行。

例如,如果一个函数需要 3 个参数,而您只提供了 2 个,并且在函数定义中第三个参数未分配为 NULL,则该函数将引发错误。

于 2012-07-27T05:48:49.870 回答
1

这是一个具有默认值的构造函数,如果参数未传递给 _construct 方法,它将为变量分配 NULL 值。所以这意味着它不需要向这个构造函数传递参数。

于 2012-07-27T05:51:16.380 回答
1

这种语法是为了方便你在不传递任何参数的情况下启动类

function __construct($hostname = NULL, $username = NULL, $password = NULL, $database = NULL)

这个签名告诉你可以选择传递参数假设你Class A{}有这个构造函数你可以选择通过以下方式启动它

$t = new A();
$t1 = new A('locathost','user1','pw1', $db_connection);
$t2 = new A('localhost');

这些所有初始化都是有效的。

于 2012-07-27T05:51:45.517 回答