【发布时间】:2016-08-05 07:30:52
【问题描述】:
我的意思是我需要使用define() 来设置对象,然后再将它传递给我的类的方法吗?或者它在传递时是否被认为是常量,因为它是通过引用使用的?我想我对手册的信息有误解。
class User
{
private $pdo = false;
...
public function __construct($pdo)
{
$this->pdo = $pdo;
}
...
}
$pdo = new PDO(...);
$user = new User($pdo);
对
class User
{
private $pdo = false;
...
public function __construct($pdo)
{
$this->pdo = $pdo;
}
...
}
define(MYPDO, new PDO(...));
$user = new User(MYPDO);
我正在阅读 PHP manual 中提到的对象属性,它声明初始化必须是常量,以便可以在编译时对其进行评估。
读了几遍之后,我用哪种方式都没有关系,因为它不会在类定义中被实例化。
如果我理解正确,手册所指的情况是在类定义中定义对象,而不是将值传递给属性。
我目前在使用 PDO 对象时将它们传递给每个函数,因此我想尝试在构造时传递它一次。或者,这是个坏主意吗?
我不确定这样做是否有任何好处,我只是想更好地理解 OOP。
【问题讨论】:
-
如果您使用的是 PHP 的非死版本,它是通过引用传递的,第一个选项会起作用。但是,第二个版本不起作用,因为您的构造仍然需要一个变量......但更重要的是,因为您不能将类定义为常量。传入构造函数称为依赖注入,是一种非常常见的方法。 ^^
-
@Jon 抱歉,我错过了删除 getByUserName 方法。它已修复。
-
嗯,好的。但是,您仍然不能将常量分配为类。该代码应该在
define(MYPDO, new PDO(...));失败
标签: php class object properties