【问题标题】:PHP Optional Function ArgumentsPHP 可选函数参数
【发布时间】:2013-09-15 11:20:47
【问题描述】:

我在尝试创建一个采用单个可选参数的函数时有点卡住了。我希望它不是一个字符串,而是一个函数(或者更好的是,一个 DateTime 对象)的结果。本质上 - 我希望用户要么传入一个 DateTime 对象,要么让函数在没有提供参数的情况下诉诸今天的日期。这可以用PHP吗?通过尝试在函数头中创建新对象

function myDateFunction($date = new DateTime()){
//My function goes here.
}

导致 PHP 崩溃。

非常感谢。

【问题讨论】:

    标签: php


    【解决方案1】:

    是的。如果您将$date 实例化移动到函数体,这是可能的:

    <?php
    header('Content-Type: text/plain');
    
    function myDateFunction(DateTime $date = null){
        if($date === null){
            $date = new DateTime();
        }
    
        return $date->format('d.m.Y H:i:s');
    }
    
    echo
        myDateFunction(),
        PHP_EOL,
        myDateFunction(DateTime::createFromFormat('d.m.Y', '11.11.2011'));
    ?>
    

    结果:

    15.09.2013 17:25:02
    11.11.2011 17:25:02
    

    来自php.net

    类型提示允许 NULL 值

    【讨论】:

    • “是的。有可能:” --- 不是。不要迷惑​​新手
    【解决方案2】:

    默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用。

    http://php.net/manual/en/functions.arguments.php#example-154

    【讨论】:

      【解决方案3】:

      你可以这样做:

      function myDateFunction($date = null){
          if(is_null($date) || !($date instanceof DateTime)) {
              $date = new DateTime();
          }
      
          return $date;
      }
      
      var_dump(myDateFunction());
      

      【讨论】:

      • 感谢您复制我建议的解决方案并稍作修改(谁曾经编辑过这个)。
      • 哈哈,@OlegTikhonov,我没有。
      • 上次我检查过,PHP 评估 if(!($date instanceof DateTime)) 与 if($date !instanceof DateTime) 相同,但没关系 :)
      • @OlegTikhonov:检查时间:我(59 分钟前回答),你(58 分钟前回答);)
      【解决方案4】:

      您可以使用其他选项:

      function myDateFunction($date = null){
       if(is_null($date)) $date = new DateTime();
      
      }
      

      【讨论】:

        【解决方案5】:
        function myDateFunc($date = null){
           if(!isset($date) || $date !instanceof DateTime){
             $date = new DateTime()
           }
           /* YOur code here*/
        }
        

        【讨论】:

          【解决方案6】:

          对于函数中的可选参数,您可以编写类似的代码

          function myDateFunction($date = ''){
                   //My function goes here.
                   if($date==''){ $date = new DateTime()}
              }
          

          希望对你有帮助

          【讨论】:

          • 习惯上用null代替空字符串来表示传递的数据不足。
          猜你喜欢
          • 1970-01-01
          • 2011-04-28
          • 2013-02-28
          • 1970-01-01
          • 2012-05-22
          • 1970-01-01
          • 2012-10-15
          • 2015-04-27
          • 2011-07-23
          相关资源
          最近更新 更多