如果尚未设置,我正在尝试传递变量。这是旧方法:
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();
答案 0 :(得分: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-&gt; setDate,做
$getDate->setDate('2013-08-31 13:05:18', '');
将格式设置为''
答案 1 :(得分:1)
以下tutorial可能会有所帮助。
基本上,确保所有可选参数都位于函数参数列表的最右侧。您可以通过在声明函数时为其提供值来将参数定义为可选参数。
因此在您的示例中,函数可以定义如下:
public function setDate($date, $var3, $format='Y-m-d') {
$this->date = date($format, strtotime($date));
}
现在,如果你只用2个参数调用它(跳过第三个),它将被假定为'Y-m-d'。 E.g。
$data->setDate('2013-08-31 13:05:18', $myVar);
但是,以下内容将失败,因为它缺少第二个参数,该参数未定义为可选(没有默认值):
$data->setDate('2013-08-31 13:05:18');
请注意,您也可以将默认值定义为NULL或FALSE。
答案 2 :(得分:0)
http://php.net/manual/en/functions.arguments.php
我不确定你是如何使你的函数按预期工作的,因为PHP.net文档声明:
请注意,使用默认参数时,任何默认值都应该在 任何非默认参数的右侧;否则,事情就不会发生 按预期工作。
所以你必须在程序样式中检查第二个变量的值才能使事情正常工作。
答案 3 :(得分: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
除非您打算在其他地方使用它,否则无需公开$格式。在这种情况下,你可以像在构造函数中那样传递它并在那里设置它,或者使用另一种方法。
如果您想使用公共值,那么这是一种方法:
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();
答案 4 :(得分: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();
?>
您的问题是您正在设置未设置的$格式。首先(当调用类时)public $format = 'Y-m-d';
然后当你调用set date时,你把它覆盖到''
。这打破了你的date
功能。 $format
中的默认public function setDate
仅在您通话期间不覆盖该默认值时才有效(即:setDate('2013-08-31 13:05:18', '', '')
)。 (意思是我的解决方案不是唯一的解决方案,但你必须选择一个并坚持下去!)希望这会有所帮助。
答案 5 :(得分:-1)
setDate($ date,$ format = $ this-&gt; format,$ var3)