php - 对象是否可以引用父对象方法?

时间:2011-07-09 16:59:06

标签: php

好的,所以我已经掌握了编写类和方法的基础知识,并扩展了它们。

我可以轻松地编写一个包含我可能想要的所有方法的大型类,或者只是在链中继续扩展的几个类。但事情开始变得难以管理。

我想知道我是否可以做类似以下代码的事情,所以我可以将“模块”分开,并且只在需要时启动它们。我希望这对于我希望实现的目标有一定的意义:

// user/member handling methods "module"
class db_user
{
    public function some_method()
    {
        // code that requires parent(?) objects get_something() method
    }
}

// post handling methods "module"
class db_post
{
    public function some_method()
    {
        // code that requires parent(?) objects update_something() method
    }
}

class db_connect()
{
    public $db_user;
    public $db_post;

    public function __construct()
    {
        // database connection stuff
    }
    public function __destruct()
    {
        // blow up
    }

    // if i want to work with user/member stuff
    public function set_db_user()
    {
        $this->db_user = new db_user();
    }

    // if i want to work with posts
    public function set_db_post()
    {
        $this->db_post = new db_post();
    }

    // generic db access methods here, queries/updates etc.
    public function get_something()
    {
        // code to fetch something
    }

    public function update_something()
    {
        // code to fetch something
    }
}

然后我会创建一个新的连接对象:

$connection = new db_connect();

需要与用户合作..

$connection->set_db_user();
$connection->db_user->some_method();

现在我需要对帖子做点什么......

$connection->set_db_post();
$connection->db_post->some_method();
$connection->db_post->some_other_method();

我希望有人可以在这里帮助我,我已经搜索了几天但似乎找不到任何信息,除了基本上把它全部放在一个类或创建一个无穷无尽的扩展链 - 这不是没有用,因为虽然我希望一切都通过一个“界面”工作,但我仍然希望将“模块”分开。

道歉,如果这看起来完全荒谬的话 - 毕竟我是新手......

2 个答案:

答案 0 :(得分:2)

您可以将对db_connect实例的引用传递给db_user / db_post构造函数,并将其存储到字段$parent中。

答案 1 :(得分:2)

db_connection传递到db_*类:

class db_user
{
    protected $db;

    public function __construct($db)
    {
        $this->db = $db;
    }

    public function some_method()
    {
        // code that requires parent(?) objects update_something() method
        $this->db->update_something();
    }
}

使用:

$db = new db_connection();
$user = new db_user($db);
$user->some_method()

db_connect不应该有set_db_userset_db_post等。它应该处理连接到数据库,可能还有一些通用的选择/更新/插入/删除方法