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

有一个主类,所有其他类都从它扩展而来。所有其他类都通过一个具有类名的变量在它们之间相互连接。说得更简单,我有 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/

10-13 01:38