论坛: 编程破解 标题: ===========一个PHP问题请帮忙============ 复制本贴地址    
作者: snntss [snntss]    论坛用户   登录
--------------------------------------------------------------------------------

<?php
function aaa()
{
static $i=0;
$i++;
}

for($j=0;$j<10;$j++)
{
aaa();
print("$i<br>");
}

?>


我本来是想打印 1 ~ 10 的, 但是又不能改动aaa()这个函数, 请问怎么解决??

地主 发表时间: 04-08-06 15:18

回复: NetDemon [netdemon]   ADMIN   登录
你print $j 嘛
关aaa()什么事呢

B1层 发表时间: 04-08-06 15:49

回复: TomyChen [quest]   版主   登录
我大概看明白了...
他是想用aaa()使i++...
但是你的function里面又给i = 0;赋值了,就是说
每次执行aaa()的时候就给i赋0然后再++,永远都是1....
不改函数!?行吗!?
方法1,用return 2 global $i;

B2层 发表时间: 04-08-06 15:52

回复: yingzike [yingzike]   论坛用户   登录
//改aaa()

<?php
static $i=0;
function aaa()
{

$i++;
}

for($j=0;$j<10;$j++)
{
aaa();
print("$i<br>");
}

?>

//不改,好我就不改

<?php
function aaa()
{
static $i=0;
$i++;
}

for($j=0;$j<10;$j++)
{
aaa();
$i++;
print("$i<br>");
}

?>

//哈哈,乱搞笑呢,aaa()本身就有问题了,每次调用都初始化一下$i=0;正如同楼上说的
你只能改了,或者想其他方法


B3层 发表时间: 04-08-06 18:41

回复: lqfrla [lqfrla]   论坛用户   登录


B4层 发表时间: 04-08-07 14:51

回复: snntss [snntss]   论坛用户   登录
yingzike 写的第一种改aaa()的方法我调试的时候为什么全为 0 啊,没有得到想到的1~10,
还有, 我最上面写的我调试的结果怎么会全为 3 呢?  它关 3  什么事了.

B5层 发表时间: 04-08-10 14:20

回复: snntss [snntss]   论坛用户   登录
我的意思就和TomyChen 说的那样,通过aaa()来使$i++.而且必须得这样.
我按的 TomyChen 的意思写的用return ,但是仍然得不到我想要的结果:
<?php

static $i=0;

function aaa()
{
  $i++;
  return($i);
}

for($j=0;$j<10;$j++)
{
  print(aaa()."<br>");
}

?>

当aaa()每次被调用的时候,$i的初始值总是 0,没有保存上次aaa()运行后的结果, 不知道要怎么写才对.请大家帮帮忙.


[此贴被 飘萍浪影(snntss) 在 08月10日14时36分 编辑过]

B6层 发表时间: 04-08-10 14:33

回复: snntss [snntss]   论坛用户   登录
哈哈,总算出来啦~
原来 static 语句必须得写在aaa()的里面 ,写到外面声明表态变量不会成功, 也就得不到理想结果,yingzike 把它写到外面啦. 而我一开始的时候是写对了, 但是没有用return, 就是说运行aaa()后, 它没有带来任何东西,所以调用它也是白调用,最后还是没有得到想要的结果.
========================================================
不过, 我在实际中碰到的问题比这要复杂些,类似如下问题:
aaa()本来的动作是:首先作一个数据查询,然后然后打印一张表格.
因为我是给别人扩展系统的功能,所以我不能改动aaa()打印表格的功能,现在我给它加上一个功能,当扩展程序调用aaa()一次,$i就加 1,但是这时不能让它打印出表格,而只返回$i的值

现在的问题是如果我return($i),那么我调aaa(),它就会把把我不需要的表格也打印出来了.
类似如下
========
<?php

function aaa()
{
  //--------------------------------原来的功能---------------------------------//
  print("<table width=100 border=1><tr><td>aaa</td><td>bbb</td></tr></table>");
  //---------------------------------------------------------------------------//

  //--------------------------------新加的功能---------/-----------------------//
  static $i=0;
  $i++;
  return($i);
}

for($j=0;$j<10;$j++)

print(aaa()."<br>");
}

?>



[此贴被 飘萍浪影(snntss) 在 08月10日15时12分 编辑过]


[此贴被 飘萍浪影(snntss) 在 08月10日15时15分 编辑过]

B7层 发表时间: 04-08-10 15:08

回复: TomyChen [quest]   版主   登录
代码:

<?php

static $i=0;

function aaa()
{
global $i;
$i++;
return($i);
}

for($j=0;$j<10;$j++)
{
print("Result:".aaa()."<br>");
}

?>
运行结果:
Result:1
Result:2
Result:3
Result:4
Result:5
Result:6
Result:7
Result:8
Result:9
Result:10


注意看看代码中的...global

B8层 发表时间: 04-08-10 15:12

回复: yingzike [yingzike]   论坛用户   登录
试了一下自己说的两个,前面一个确实是0。$i,没有起到变化
<?php
function aaa()
{
static $i=0;
$i++;
}

for($j=0;$j<10;$j++)
{
aaa();
$i++;
print("$i<br>");
}

?>
这一个也确实能出现$i变化的情况,可惜搞错了问题,此$i,非彼$i,在aaa()函数中的$i,是不会变到....6.7.8.9的,所以对此造成的误人子弟的做法向楼主表示谦意
特罚yingzike面壁思过三天

B9层 发表时间: 04-08-11 18:27

回复: SNNTSS [snntss]   论坛用户   登录
难得这位仁兄这么热心了,还是要感谢你!


B10层 发表时间: 04-08-14 15:20

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号