首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP5:对象引用

PHP5:对象引用
EN

Stack Overflow用户
提问于 2015-07-12 03:40:00
回答 1查看 126关注 0票数 3

我正在用php编写一些实体类,这些类可能与存储库类相互指向(以避免使用本地实体存储库查询过多的数据库):

代码语言:javascript
复制
class Foo
{
    public $fooId;
    public $bar;
    function __construct($entity_id)
    {
        /**
        * Some Database stuff to get Foo object based on $entity_id
        **/
        $this->bar = Repository::get('Bar', $databaseStuff->barId);
    }
}

class Bar
{
    public $foo;
    function __construct($entity_id)
    {
        /**
        * Some Database stuff to get Bar object based on $entity_id
        **/
        $this->bar = Repository::get('Bar', $databaseStuff->barId);
    }
}

class Repository
{
    private static $entities = [];
    /**
     * @param string $entity_name
     * @param int $entity_id
     * @return mixed
     */
    public static function &get($entity_name, $entity_id)
    {
        $entity_name = ucfirst(strtolower($entity_name));
        if(!isset(self::$entities[$entity_name][$entity_id]))
        {
            self::$entities[$entity_name][$entity_id] =& $entity_name($entity_id);
        }
        return self::$entities[$entity_name][$entity_id];
    }
}

$foo = new Foo(1337);

问题是,我得到了某种超时/堆栈溢出,这可能是因为$foo->bar是对Bar对象的引用,而$bar->foo是对Foo对象的引用,等等……

  • 我没有忘记使用&get()声明函数来返回引用,对吗?
  • 我的类用=&操作符实例化。

在我的代码中(或者在我的逻辑中)会有什么问题呢?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-07-18 10:22:54

如果我认为正确的话,Bar的构造函数将尝试创建新的Bar。

我想这种嵌套的构造永远不会结束。这是相同的,例如,当一个函数递归地调用自己而没有退出的时候。

脚本甚至不会编写到存储库中。

试过x调试吗?这可能很快就会显示出问题。

顺便说一句,有可能是不好的复制/粘贴。Foo类中的注释与使用它的行不匹配。在类栏中设置$this-> Bar,但只声明类变量$foo。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31364150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档