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函数内进行)谢谢

解决方案 »

  1.   

    可以用 return, 又不是 static 或者 是  void  ==
    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); 
      

  2.   

    修改如下: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??? 


    } //函数的返回值你要通过变量获取
    $time=is_public_day('2009-07-16',3);
    //输出变量值
    echo time;
      

  3.   


    这位大哥的我也试了, 变量$time根本没有值, 你向如下试下就知
    $time=is_public_day('2009-07-16',3);
    //输出变量值
    echo $time;
    echo $time;
    echo $time;虽然有一个输出, 但这个输出不是 echo $time显示的, 而是当你想把函数值赋给$time的时候已经输出了;
    实际上这也是我想用return 的原因, 因为函数中用了echo,就变成了在哪里写这个函数就在哪里输出;
      

  4.   

    return()会结束函数的执行,将它的参数作为函数的值返回。
    楼主原来的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); 
    ?> 
      

  5.   


    还是有问题的, 如下, 按哥哥这样做:
    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的结果是不符合的。
      

  6.   

     echo与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(); 输出结果为:家用电脑播放电影
    感觉这个比较适合你的心情~
      

  7.   

     //最下边的改成这样了,你试下吧
    $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;
      

  8.   

    //return $tmp_date; //在我2楼的回复中没有去掉注释,而是直接ECHO 结果


    //如Exbox所说,RETURN的语句是应该放在这里
    } //函数的返回值你要通过变量获取
    $time=is_public_day('2009-07-16',3);
    //输出变量值
    echo $time;//当时回复匆忙了,没有加变量符$//echo 'date='.$time;和echo 'date='.is_public_day('2009-07-16',3);等效,变量在生命周期内的值在传递中不会发生变化的//看兄弟基础不是很扎实,可以多看几遍书,磨刀不误砍柴工,这个,之前得分惭愧的,真是抱歉