自循环函数 为什么不能用return?????

发布时间:2024-05-24 07:04 发布:上海旅游网

问题描述:

public.php如下:
<?php

function is_public_day($tmp_date,$tmp_process) {

$tmp_date = date("Y-m-d H:i:s" , strtotime($tmp_date) + 86400);

$public = array(
'2009-01-01',
'2009-01-02',
'2009-01-03',

'2009-01-25',
'2009-01-26',
'2009-01-27',
'2009-01-28',
'2009-01-29',
'2009-01-30',
'2009-01-31',

'2009-04-04',
'2009-04-05',
'2009-04-06',

'2009-05-01',
'2009-05-02',
'2009-05-03',

'2009-05-28',
'2009-05-29',
'2009-05-30',

'2009-10-01',
'2009-10-02',
'2009-10-03',
'2009-10-04',
'2009-10-05',
'2009-10-06',
'2009-10-07',
'2009-10-08',
);

$notpublic = array(
'2009-01-04',

'2009-01-24',
'2009-02-01',

'2009-05-31',

'2009-10-10',
'2009-10-11',
);

if ( !in_array( substr( $tmp_date, 0, 10 ), $notpublic ) && ( in_array( substr( $tmp_date, 0, 10 ), $public ) || date( 'w', strtotime($tmp_date) ) == 0 || date( 'w', strtotime($tmp_date) ) == 6 ) ) {
if ( $tmp_process > 0 ) {
is_public_day( $tmp_date , $tmp_process );
}
} else {
if ( $tmp_process > 1 ) {
$tmp_process = $tmp_process - 1;
is_public_day( $tmp_date, $tmp_process );
} else {
echo $tmp_date;
//return $tmp_date; 为什么不能用return???
}
}
}

is_public_day('2009-07-16',3);
?>

意思是求 2009-07-16之后3个工作日是哪天?
为什么不能用
return $tmp_date;
只能用
echo $tmp_date;

用了echo之后会造成很多的麻烦, 也就是说只要一引用is_public_day()函数, 就会直接输出,
不能再赋值, 不能运算。(可能因为echo就是输出吧)

我最想问下各位高手们 该怎样解决这个弊端, 因为我需要运算函数得到的值和比较函数值, 而不是直接输出。
(运算和比较不在is_public_day函数内进行)
大哥第二次的说的不对, 这样是返回不了任何值的。
你可以把这个存成php文件试一下。

但是大哥第一次说的却是有道理,后来我又翻查了php圣经, 按你第一次的思路修改成可以用的啦,
谢谢你的提点。
正确的是下面这样:
if ( !in_array( substr( $tmp_date, 0, 10 ), $notpublic ) && ( in_array( substr( $tmp_date, 0, 10 ), $public ) || date( 'w', strtotime($tmp_date) ) == 0 || date( 'w', strtotime($tmp_date) ) == 6 ) ) {
if ( $tmp_process > 0 ) {
is_public_day( &$tmp_date , &$tmp_process );
}
} else {
if ( $tmp_process > 1 ) {
$tmp_process = $tmp_process - 1;
is_public_day( &$tmp_date, &$tmp_process );
}
}
}

$tmp_date = '2009-07-16';
$tmp_process = 3;
is_public_day(&$tmp_date, &$tmp_process);
echo 'Good = '.$tmp_date;

?>

问题解答:

使用递归时传递数据要传址而不是传值
&$tmp_date
另外is_public_day('2009-07-16',3); 没有具体复制给哪个变量return当然没用

刚才没仔细看,你return语句位置放错了
} else {
echo $tmp_date;
//return $tmp_date; 为什么不能用return???
}
}
}

is_public_day('2009-07-16',3);

这部分改成
} else {
//echo $tmp_date;
$aaa = $tmp_date;
//return $tmp_date; 为什么不能用return???
}
}
return $aaa;
}

$ddd = is_public_day('2009-07-16',3);
echo $ddd;

热点新闻