如何设计,防止两个函数之间相互调用形成死循环?

inssuc 2011-11-20 01:40:22
有些特征明显的功能,我想分成两个类,但是这两个类之间又会相互用到对方的方法,
这就有可能出现两个函数相互对方,或者再通过更多的函数,连接成死循环。

如果将这多个函数合并为一个较复杂的函数,又失去了简单性。
这种情况请该如何设计呢?
...全文
569 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
ci1699 2011-11-22
  • 打赏
  • 举报
回复
恍然大悟啊。鸡鸡与蛋蛋确实是可以并存的。
但楼主说的应该属于鸡鸡扯到蛋的问题了。

[Quote=引用 22 楼 foolbirdflyfirst 的回复:]

引用 21 楼 joking520 的回复:

引用 17 楼 foolbirdflyfirst 的回复:

function hao1(){
hao2();
}
function hao2(){
hao1();
}
===========================
这种代码的意思是:
#1.hao1对hao2说,我是鸡,你是蛋
#2.hao2对hao1说,我是蛋……
[/Quote]
码无边 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 foolbirdflyfirst 的回复:]

引用 21 楼 joking520 的回复:

引用 17 楼 foolbirdflyfirst 的回复:

function hao1(){
hao2();
}
function hao2(){
hao1();
}
===========================
这种代码的意思是:
#1.hao1对hao2说,我是鸡,你是蛋
#2.hao2对hao1说,我是蛋……
[/Quote]好一个鸡蛋定律啊!
ZT_King 2011-11-22
  • 打赏
  • 举报
回复
这跟goto差不多的逻辑该换换了.JJ+DD半天没反应过来.都是老湿.
helloyou0 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 foolbirdflyfirst 的回复:]

设计出了问题,为啥要从编码的角度去思考?
所以建议你静下心来,不妨画一画图,把你认为的高度耦合的函数想办法细分开,现在出现这个问题,只能说明你的代码设计出了严重问题,把自己都绕进去了。
[/Quote]

+1
QWER_ASDFASDF 2011-11-21
  • 打赏
  • 举报
回复
你可以加个判断
码无边 2011-11-21
  • 打赏
  • 举报
回复
重载。
baoxiaohua 2011-11-21
  • 打赏
  • 举报
回复
直接写出递归不就得了!
或者非要写出这样的话,你应该写一个调用条件,避免进入死循环
helloyou0 2011-11-21
  • 打赏
  • 举报
回复
还真没遇到过,
举个具体点的例子分析分析,怎么个“如果将这多个函数合并为一个较复杂的函数,又失去了简单性”。。。

3楼那种,怎么也写不出来
foolbirdflyfirst 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 joking520 的回复:]

引用 17 楼 foolbirdflyfirst 的回复:

function hao1(){
hao2();
}
function hao2(){
hao1();
}
===========================
这种代码的意思是:
#1.hao1对hao2说,我是鸡,你是蛋
#2.hao2对hao1说,我是蛋,你是鸡
好吧,哲学上你的问题就是先有蛋,还是先有……
[/Quote]
恭喜你发明了joking250定理
即综上所述 鸡蛋 == 鸡鸡 + 蛋蛋,你比ci1699哲学帝更上二层楼。
必须向LZ道歉,都怪我把楼歪了,LX继续吧。
joking520 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 foolbirdflyfirst 的回复:]

function hao1(){
hao2();
}
function hao2(){
hao1();
}
===========================
这种代码的意思是:
#1.hao1对hao2说,我是鸡,你是蛋
#2.hao2对hao1说,我是蛋,你是鸡
好吧,哲学上你的问题就是先有蛋,还是先有鸡的问题。
[/Quote]

其实鸡和蛋是同时存在的。不信你看看你身上的JJ和DD。是不是同时存在的。。。
ci1699 2011-11-21
  • 打赏
  • 举报
回复
很明显先有鸡啊。
鸡蛋一定是鸡生的。

所以有hao1()鸡就好了。

[Quote=引用 17 楼 foolbirdflyfirst 的回复:]

function hao1(){
hao2();
}
function hao2(){
hao1();
}
===========================
这种代码的意思是:
#1.hao1对hao2说,我是鸡,你是蛋
#2.hao2对hao1说,我是蛋,你是鸡
好吧,哲学上你的问题就是先有蛋,还是先有鸡的问题。
[/Quote]
gaozhen1990 2011-11-21
  • 打赏
  • 举报
回复
..你限制不就OK了吗? ..要么你调试用 xdebug, 它可以限制的.
kyzy_yy_pm 2011-11-21
  • 打赏
  • 举报
回复
个人观点是不会出现的问题,因为你用到的是对象而不是类的本身,会想调用的只是一个变量,根本会影响到类本身
foolbirdflyfirst 2011-11-21
  • 打赏
  • 举报
回复
function hao1(){
hao2();
}
function hao2(){
hao1();
}
===========================
这种代码的意思是:
#1.hao1对hao2说,我是鸡,你是蛋
#2.hao2对hao1说,我是蛋,你是鸡
好吧,哲学上你的问题就是先有蛋,还是先有鸡的问题。
foolbirdflyfirst 2011-11-21
  • 打赏
  • 举报
回复
设计出了问题,为啥要从编码的角度去思考?
所以建议你静下心来,不妨画一画图,把你认为的高度耦合的函数想办法细分开,现在出现这个问题,只能说明你的代码设计出了严重问题,把自己都绕进去了。
happypiggy2010 2011-11-21
  • 打赏
  • 举报
回复
层数限制。

所有这些函数,我一定做层次限制。不能无限调用,导致stack出错。
wxq41007982 2011-11-21
  • 打赏
  • 举报
回复
加个全局变量计数,如果一个非递归函数调用自已超过n次就认为是死循环
dencey 2011-11-20
  • 打赏
  • 举报
回复
定义函数以及调用函数的时候总要明白这些函数的细节(作用,参数,返回值之类的)吧,明白了这些你在设计函数的时候怎么会出现死循环呢
黄袍披身 2011-11-20
  • 打赏
  • 举报
回复
不太好说,一般我会分析出一个基类然后在分别继承,没办法 耦合就耦合吧,总好过以后看代码的时候绕来绕去头都晕了。
yunprince 2011-11-20
  • 打赏
  • 举报
回复
额,你能设计出3楼的函数也是个人才呀
你自己写的肯定要加判断呀,
加载更多回复(6)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧