0

如果尚未设置变量,我正在尝试传递它。这是旧方法:

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

这就是我在程序风格中的做法。因此,如果第二个参数为空,那么它将回退到“Ymd”。

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

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();
4

6 回答 6

1

您可以在类定义中定义与程序示例中相同的定义,如下所示:

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', ''); 

将格式设置为 ''

于 2013-08-16T15:09:19.357 回答
1

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

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

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

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

现在,如果您只使用 2 个参数(跳过第三个)调用它,它将被假定为“Ymd”。例如

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

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

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

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

于 2013-08-16T15:15:52.910 回答
0

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

I am not sure how you got your function to work as expected because the PHP.net docs state:

Note that when using default arguments, any defaults should be on the right side of any non-default arguments; otherwise, things will not work as expected.

So you would have to have been checking the value of the second variable in your procedural style for things to have worked correctly.

于 2013-08-16T15:11:15.757 回答
0

这将做你想要的:

<?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();
?>

您的问题是您正在设置一个未设置的 $format。首先(当类被调用时)public $format = 'Y-m-d';然后当你调用 set date 你将它覆盖为''. 那破坏了你的date功能。仅当您在通话期间不覆盖该默认值时,默认值才会起作用(即$format:)。(意思是我的解决方案不是唯一的解决方案,但你必须选择一个并坚持下去!)希望这会有所帮助。public function setDatesetDate('2013-08-31 13:05:18', '', '')

于 2013-08-16T15:43:22.397 回答
0

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

除非您打算在其他地方使用它,否则不需要公共 $format。在这种情况下,您可以在构造函数中传递它并将其设置在那里,或者使用其他方法。

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

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();
于 2013-08-16T15:38:49.660 回答
-1

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

于 2013-08-16T15:10:15.627 回答