我最近一直在研究自定义框架,所以在发布我的关注之前,我将解释我组织框架的方式.
有一个主类,所有其他类都可以从中扩展.所有其他类在它们之间互连,并带有一个具有类名称的变量.更容易说,我有MAIN课程.我也有类THEME,URI,INIT.
在框架初始化之后,如果我获得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;
}
并且主题,URI和INIT不再具有彼此的直接关系.