基本的php类问题

时间:2009-08-01 13:03:33

标签: php oop attributes class

忍受我,因为我是oop的新手! 是否可以将函数的结果赋给属性?
这可能没有意义所以这就是我认为代码可能看起来像!

Class b extends a 
{ 
    public $conn= $this->connect();

    public function operation() { ...}

}

connect()是来自类a的函数,它连接到数据库并在成功时返回$result

4 个答案:

答案 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