如果未设置,则传递默认参数


Passing default parameters if not set

如果变量尚未设置,我将尝试传递该变量。这是老方法:

function CHECK_DATE($DATE, $FORMAT='Y-m-d', $var3) {
CHECK_DATE(0000-00-00 00:00:00, '', '');

这就是我在程序风格中的做法。因此,如果第二个参数为空,那么它将回落到"Y-m-d"。

我有以下内容(除非我删除所有空参数,否则不起作用):

class Date {
public $date;
public $format;
public function setDate($date, $format='Y-m-d') {
    $this->date = date($format, strtotime($date));  
}
public function getDate() {
    return $this->date;
    echo 'test';        
}
}
    $getDate = new Date;
    $getDate->setDate('2013-08-31 13:05:18', '');   
    echo $getDate->getDate();

以下教程可能会有所帮助。

基本上,确保所有可选参数都位于函数参数列表的在最右边。通过在声明函数时为参数提供值,可以将参数定义为可选参数。

因此,在您的示例中,函数可以定义如下:

public function setDate($date, $var3, $format='Y-m-d') {
        $this->date = date($format, strtotime($date));          
}

现在,如果你只用两个参数调用它(跳过第三个),它将被假设为"Y-m-d"。例如

$data->setDate('2013-08-31 13:05:18', $myVar);

然而,以下操作将失败,因为它缺少第二个参数,该参数未定义为可选参数(没有默认值):

$data->setDate('2013-08-31 13:05:18');

请注意,您也可以将默认值定义为NULL或FALSE。

您可以在类定义中定义它,就像在过程示例中一样,如下所示:

public function setDate($date, $var3, $format='Y-m-d') {
        $this->date = date($format, strtotime($date));          
    }

编辑:在做了自己的测试后,以下是我可以验证的工作:

<?php
class Date {
public $date;
public $format;
public function setDate($date, $format='Y-m-d') {
        $this->date = date($format, strtotime($date)); 
    }
public function getDate() {
    echo $this->date;        
}
}
    $getDate = new Date;
    $getDate->setDate('2013-08-31 13:05:18');   
    echo $getDate->getDate();
?>

问题是当你做$getDate->setDate时,做

$getDate->setDate('2013-08-31 13:05:18', ''); 

将格式设置为"

http://php.net/manual/en/functions.arguments.php

我不确定你是如何使你的功能按预期工作的,因为PHP.net文档状态:

请注意,当使用默认参数时,任何默认值都应位于任何非默认论点的右侧;否则,事情就不会工作如预期。

因此,您必须检查程序样式中第二个变量的值,以确保工作正常。

这将执行您想要的操作:

<?php
class Date {
    public $date;
    public $format;
    public function setDate($date, $var3, $format="Y-m-d") {
        $this->date = date($format, strtotime($date));   
    }
    public function getDate() {
        return $this->date;
    }
}
$getDate = new Date;
$getDate->setDate('2013-08-31 13:05:18', '');   
echo $getDate->getDate();
?>

您的问题是您正在设置一个未设置的$格式。首先(当调用类时)public $format = 'Y-m-d';,然后当调用set date时,将其重写为''。这破坏了你的date功能。只有在呼叫过程中不覆盖默认值(即:setDate('2013-08-31 13:05:18', '', '')),public function setDate中的默认$format才会起作用。(这意味着我的解决方案不是唯一的解决方案,但你必须选择一个并坚持下去!)希望这能有所帮助。

在第一个示例中,您传递的是空字符串,而不是null值,因此默认值将被覆盖。

就我个人而言:

class Date {
    public $date = null;
    public function setDate($date=null, $dateFormat='Y-m-d', $var3=null) {
        $this->date = date($dateFormat, strtotime($date));          
    }
    public function getDate() {
        return $this->date;
    }
}

$getDate = new Date;
$getDate->setDate('2013-08-31 13:05:18'); // Y-m-d
$getDate->setDate('2013-08-31 13:05:18', null, null);   // Y-m-d
$getDate->setDate('2013-08-31 13:05:18', 'Y-d-m', null);  // Y-d-m

不需要公共$格式,除非您计划在其他地方使用它。在这种情况下,您可以像在构造函数中那样传递它并在那里设置它,或者使用另一个方法。

如果你想使用公共价值,那么这是一种方法:

class Date {
    public $date = null; // or protected, or private
    public $dateFormat = 'Y-m-d'; // or protected, or private
    public function setDate($date) {
        $this->date = date($this->dateFormat, strtotime($date));
    }
    public function setDateFormat($dateFormat) {
        $this->dateFormat = $dateFormat;
    }
    public function getDate() {
        return $this->date;
    }
}
$date = new Date();
$date->setDateFormat('Y-d-M');
$date->setDate('2013-08-31 13:05:18');
echo $date->getDate();

setDate($date,$format=$this->format,$var3)