public.php如下:
<?phpfunction 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函数内进行)谢谢
<?phpfunction 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函数内进行)谢谢
if ( $tmp_process > 1 ) {
$tmp_process = $tmp_process - 1;
is_public_day( $tmp_date, $tmp_process );
} else {
//echo $tmp_date;
return $tmp_date; 为什么不能用return???
}
echo is_public_day('2009-07-16',3);
'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???
}
}
} //函数的返回值你要通过变量获取
$time=is_public_day('2009-07-16',3);
//输出变量值
echo time;
这位大哥的我也试了, 变量$time根本没有值, 你向如下试下就知
$time=is_public_day('2009-07-16',3);
//输出变量值
echo $time;
echo $time;
echo $time;虽然有一个输出, 但这个输出不是 echo $time显示的, 而是当你想把函数值赋给$time的时候已经输出了;
实际上这也是我想用return 的原因, 因为函数中用了echo,就变成了在哪里写这个函数就在哪里输出;
楼主原来的return是放在if ( $tmp_process > 1 )里的,但其实这个return应该是等两个if语句判断结束后才返回值,所以应该放在大括号外
if ( $tmp_process > 1 ) {
$tmp_process = $tmp_process - 1;
is_public_day( $tmp_date, $tmp_process );
} else { //return $tmp_date; 为什么不能用return???
}
}
return $tmp_date
} is_public_day('2009-07-16',3);
?>
还是有问题的, 如下, 按哥哥这样做:
if ( $tmp_process > 1 ) {
$tmp_process = $tmp_process - 1;
is_public_day( $tmp_date, $tmp_process );
} else {
echo 'Echo = '.$tmp_date.'<br />';
}
}
return $tmp_date;
}echo 'Return = '.is_public_day('2009-07-16',3);得到的结果是下面这样:
Echo = 2009-07-21 00:00:00
Return = 2009-07-17 00:00:00echo的结果才是正确的, return的结果是不符合的。
复制代码 - PHP100.comclass MyPc{
public $name;
public $type;
function vod(){
echo "播放电影";
}
function game(){
return "玩游戏";
}
function intelnet(){
return "上网";
}
}
$pc1=new MyPc();
$pc1->name="家用电脑";
echo $pc1->name.$pc1->vod(); 输出结果为:播放电影家用电脑
复制代码 - PHP100.comclass MyPc{
public $name;
public $type;
function vod(){
return "播放电影";
}
function game(){
return "玩游戏";
}
function intelnet(){
return "上网";
}
}
$pc1=new MyPc();
$pc1->name="家用电脑";
echo $pc1->name.$pc1->vod(); 输出结果为:家用电脑播放电影
感觉这个比较适合你的心情~
$back='';//用于接收你递归的值。
if($tmp_process==0) {
return $tmp_date; //为什么不能用return???
} elseif (! 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) {
$tmp_process = $tmp_process - 1;
$back=is_public_day ( $tmp_date, $tmp_process );
}
} else {
if ($tmp_process > 1) {
$tmp_process = $tmp_process - 1;
$back=is_public_day ( $tmp_date, $tmp_process );
}
}
return $back;
/*调用*/
$b = is_public_day ( '2009-07-16', 3 );
echo $b;
}
}
//如Exbox所说,RETURN的语句是应该放在这里
} //函数的返回值你要通过变量获取
$time=is_public_day('2009-07-16',3);
//输出变量值
echo $time;//当时回复匆忙了,没有加变量符$//echo 'date='.$time;和echo 'date='.is_public_day('2009-07-16',3);等效,变量在生命周期内的值在传递中不会发生变化的//看兄弟基础不是很扎实,可以多看几遍书,磨刀不误砍柴工,这个,之前得分惭愧的,真是抱歉