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

Php 如果未设置,则传递默认参数,php,function,Php,Function,我试图传递一个未设置的变量。以下是旧方法: function CHECK_DATE($DATE, $FORMAT='Y-m-d', $var3) { CHECK_DATE(0000-00-00 00:00:00, '', ''); 这就是我应该以程序的方式来做的。因此,如果第二个参数为空,那么它将返回到“Y-m-d” 我有以下内容(除非删除所有空参数,否则不起作用): 您可以在类定义中定义它,就像在过程示例中一样,如下所示: public function setDate($date, $va

我试图传递一个未设置的变量。以下是旧方法:

function CHECK_DATE($DATE, $FORMAT='Y-m-d', $var3) {
CHECK_DATE(0000-00-00 00:00:00, '', '');
这就是我应该以程序的方式来做的。因此,如果第二个参数为空,那么它将返回到“Y-m-d”

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


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

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();
?>
将格式设置为“”

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

我不确定您是如何让函数按预期工作的,因为PHP.net文档声明:

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

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

以下内容可能会有所帮助

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

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

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);
但是,以下操作将失败,因为它缺少第二个参数,该参数未定义为可选(没有默认值):


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

您的第一个示例是传递空字符串,而不是
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();

这将满足您的要求:

<?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时,您将其改写为
'
。这破坏了你的
日期
功能。只有在调用过程中不覆盖默认设置(即:
setDate('2013-08-31 13:05:18','')
),才能在
public function setDate
中默认设置
$format
)。(这意味着我的解决方案不是唯一的解决方案,但你必须选择一个并坚持下去!)希望这能有所帮助。

那么你想做什么呢?Deafult参数值在?@UlrichSchmidt Goertz上-函数的作用是获取时间戳并将其输出到友好的格式开始使用类。
$getDate->setDate中有Bug('2013-08-31 13:05:18','';
,如果您想使用默认值,您应该完全使用第二个参数。(即
$getDate->setDate('2013-08-31 13:05:18');
)嗯,我尝试了你的方法并添加了空参数,但它不起作用。没有错误消息。什么都没有。我可以给你看一个像jsbin这样的phpbin吗?一个快速的谷歌搜索产生了-继续吧,给它一个快照不幸的是,它对它们也不起作用。你试过上面的代码吗?如果我注释掉return$this->date,那么我可以看到echo。所以som我想告诉大家,如果param 2是一种格式,你会如何跳过设置$var3I注意到你编辑了这个问题,所以我对你最初问题的解释不再适用。如果你需要,我可以重写,但这个概念仍然适用。谢谢你@lost phi哲人。它确实有效。如果我想怎么做将参数设置在$format=“Y-m-d”的右侧。如何跳过它而不覆盖它?此附加参数是否也具有默认值?如果是,则:公共函数setDate($date,$var3,$format=“Y-m-d”,$newParam='default'){…如果它没有默认值,那么它应该转到$format的左边。如果你不明白为什么,我可以展开。我确实喜欢第二种方法。更清楚。我用“$getDate->getDate()尝试了示例1获取值,但运气不佳。啊,这是我的错,我在匆忙中错过了
公共/私人/受保护的属性可见性。更新的代码现在可以正常工作了。
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();
<?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();
?>