忍受我,因为我是oop的新手!
是否可以将函数的结果赋给属性?
这可能没有意义所以这就是我认为代码可能看起来像!
Class b extends a
{
public $conn= $this->connect();
public function operation() { ...}
}
connect()
是来自类a的函数,它连接到数据库并在成功时返回$result
。
答案 0 :(得分:9)
是的,这是可能的,但你需要在像constructor:
这样的方法中这样做Class b extends a {
public $conn;
public function __construct() {
$this->conn = $this->connect();
}
public function operation() { /* ... */ }
}
答案 1 :(得分:0)
您需要将调用连接到方法中,然后在实例化类以初始化连接后调用该方法 - 或者使用构造函数方法自动执行此操作。
答案 2 :(得分:0)
通常,这是一种糟糕的形式,因为您无法确定将调用connect()
方法的实现。它是来自当前类的那个还是来自超类的那个?事实上,如果PHP甚至允许这样做,我会感到惊讶。
初始化应该在构造函数中完成,但即使这样,它也取决于初始化涉及的内容。如果需要调用另一个方法,则存在上述相同的问题:要调用哪个版本的方法?
但是,对于您描述的场景,我既不会在声明处初始化成员变量,也不会在构造函数中初始化成员变量。相反,我会将$conn
传递给构造函数。这是依赖注入的基础。
答案 3 :(得分:0)
我通常做这样的事情
$link = mysql_connect(.....,......,......);
Class b extends a {
public $conn;
public function __construct($link) {
$this->conn = $link;
}
public function operation() { /* ... */ }
}
$a = new b($link);
然后,如果您的连接详细信息发生更改,您可以在一个位置更改它们,如果需要连接到其他服务器,则可以传入另一个链接变量。
oop数据库集成的另一个技巧是总是有一个DBable基类来执行你的基本save()load()find()count()等,更快地使用db savable对象
BaseDBClass
A
B
C
D
X
Y
Z