4

在一个消息传递项目中,我有两个类,number 和 message。第一类处理数字,第二类处理消息。

number->recive()应该打电话message->getPass()。然后message->getPass应该产生一个密码,并使用它回复用户message->send().

并且有很多这样的情况,我希望在那个和那个中的这个类......

$this->number = new number()我在消息类中尝试过__constructor(),反之亦然,但出现致命错误:允许的内存大小为 33554432 字节已用尽(尝试分配 65488 字节)。

我认为错误原因很明显,我正在导致实例化的无限循环。

有没有办法让两个类互相使用?什么是正确的方法?

谢谢

编辑 0:感谢超快速的回答/评论!

编辑 1:我看到了这个问题如何在 C++ 中创建两个相互用作数据的类?我不知道这些星号到底是什么意思,如果我可以在 php 中使用它!

编辑2:关于导致错误的代码,简单地说:

测试.php:

include_once './number.php';
$number  = new number();
$number->recive();

数字.php:

include_once './message.php';
class number {

    public function __construct($numberId = NULL) {
        $this->message = new message();
        $this->pdo = new PDO("mysql:host=localhost;dbname=madb", "root", "root");
    }
    ...
}

消息.php:

class message {

    protected $pdo, $rows, $sql, $number;

    public function __construct($messageId = NULL) {
        $this->number = new number();
        $this->pdo = new PDO("mysql:host=localhost;dbname=madb", "root", "root");
    }
    ...
}

编辑 3:

某种解决方案可能是这样的:

为每个类添加一个load方法:

public function load($className) {
    require_once $className . '.php';
    $this->{$className} = new $className();
}

所以你应该$this->load('number')在我需要的时候调用从 number.php 加载数字类,然后以这种方式使用它$this->number->numberMethod()

4

2 回答 2

3

我会建议你 - 正如杰夫在评论中所说 - 创建一个使用它们的第三类。

但是,您的问题的快速解决方案:

留言类:

private $number;

public function __construct() {
  $this->number = new Number($this);
}

号码类:

private $message;

public function __construct($msg) {
  $this->message = $msg;
}
于 2013-08-11T15:58:02.630 回答
-1

您可以让一个或两个类都是单例的,这样可以避免多次构造其中任何一个...向两者添加一个静态 getInstance() 方法,该方法要么返回先前构造的实例,要么返回一个新实例...查找“单例模式”,您会看到它是如何工作的。

于 2013-08-11T16:11:08.667 回答