0

変数が設定されていない場合は、変数を渡そうとしています。古い方法は次のとおりです。

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

これは、手続き型のスタイルで行う方法です。したがって、2 番目のパラメーターが空の場合は、'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

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機能を壊しました。デフォルト設定は、通話中にそのデフォルトを上書き$formatpublic function setDateない場合にのみ機能します (例: setDate('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

他の場所で使用する予定がない限り、 public $format は必要ありません。その場合、コンストラクターのように渡してそこに設定するか、別の方法を使用できます。

public 値を使用する場合、これが 1 つの方法です。

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 に答える
0

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

PHP.net のドキュメントには次のように記載されているため、関数が期待どおりに機能するようになった方法がわかりません。

デフォルトの引数を使用する場合、デフォルトはデフォルト以外の引数の右側に配置する必要があることに注意してください。そうしないと、期待どおりに動作しません。

したがって、物事が正しく機能するためには、手続き型スタイルの 2 番目の変数の値をチェックする必要がありました。

于 2013-08-16T15:11:15.757 に答える
-1

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

于 2013-08-16T15:10:15.627 に答える