php - 数组/对象递归

标签 php recursion

我最近一直在研究自定义框架,因此在发布我的问题之前,我将解释我组织框架的方式。

有一个主类,所有其他类都是从这个主类扩展而来的。所有其他类都通过一个具有类名的变量在它们之间互连。更简单地说,我有 MAIN 类。我还有类 THEMEURIINIT

框架初始化后,如果我得到 MAIN 实例并将其分配给一个变量,比如 $main,我就可以像这样使用其他类:

$main->theme;
$main->uri;
$main->init;

如果我想,我什至可以使用 $main->theme->uri->theme->init :D,但没办法 $main->theme->theme.

此外,从类内部(MAIN 除外),我可以访问其他类,如 $this->init$this->theme 等 指向这些类的属性是引用。

现在我担心的是,当我 print_r $main 变量时,我得到了很多 RECURSION 元素。该框架加载速度很快,内存消耗为 28MB,但我仍然得到了递归。这是否意味着我组织框架的方式是错误的,或者只是 print_r 函数看到了指向相同类的指针,并避免了无限递归?

好的,这是 TF_TFUSE 类的 print_r(我正在谈论的主要类)。这里只实现了另外两个类(输出太少)。

TF_TFUSE Object
(
    [framework_version] => 2.1
    [load] => TF_LOAD Object
        (
            [_the_class_name] => LOAD
            [framework_version] => 2.1
            [buffer] => TF_BUFFER Object
                (
                    [_filters:protected] => Array
                        (
                        )

                    [_buffer:protected] => 
                    [_the_class_name] => BUFFER
                    [_is_end:protected] => 
                    [framework_version] => 2.1
                    [load] => TF_LOAD Object
 *RECURSION*
                )

        )

    [buffer] => TF_BUFFER Object
        (
            [_filters:protected] => Array
                (
                )

            [_buffer:protected] => 
            [_the_class_name] => BUFFER
            [_is_end:protected] => 
            [framework_version] => 2.1
            [load] => TF_LOAD Object
                (
                    [_the_class_name] => LOAD
                    [framework_version] => 2.1
                    [buffer] => TF_BUFFER Object
 *RECURSION*
                )

        )

)

最佳答案

问题是您将对象内部的所有内容链接在一起。通常通过创建一个容器类来解决这个问题,该容器类包含其他对象并在它们之间创建交互。

能够做到 $main->theme->uri->theme->uri->theme->uri->theme->uri->theme->uri->theme->uri->theme->uri->theme->uri->theme->uri->theme->uri->theme->init 应该给你一个错误的指示。 . .

一个可能的解决方案概括如下:

class Manager {
    $theme;
    $uri;
    $init;
}

并且 THEME、URI 和 INIT 之间不再有直接关系。

关于php - 数组/对象递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7850652/

相关文章:

php - PHP中减去预定义的时间

powershell - 列出Active Directory组层次结构

javascript - JavaScript 中的函数式递归方法?不良做法?

java - 递归给出意外/错误的输出?

java - 递归得到n的回文

php - 插入字符串的 MySQL 数据到 JSON 数组

php - 以最佳方式获取用户当前位置

PHP 计数大约千到 K 样式计数,如 facebook Share 。 . . Twitter按钮等

php - 在选择框中显示标题或跨度(Cakephp 1.3)?

C++ 数据结构(标准库)转储(如 python 打印功能)