4

コードを調べてみたところ、上記のエラーが発生した理由がわからないため、これは単純な構文エラーである可能性があると感じています。私が取り組んでいるコードは、カレンダー クラスの構築に関する SAMS ブックのチュートリアルです。記録のために、私は PHP 5.4.7 を実行しています。以下のコードは、以下に示すインクルードに属しています..

function date_pulldown($name) {
    $this->name = $name;
}

function setDate_global( ) {
    if (!this->setDate_array($GLOBALS['$this->name'])) {
        return $this->setDate_timestamp(time());
    }

    return true;
}

function setDate_timestamp($time) {
    $this->timestamp = $time;
    return true;
}

function setDate_array($inputdate) {
    if (is_array($inputdate) &&
        isset($inputdate["mon"]) &&
        isset($inputdate["mday"]) &&
        isset($inputdate["year"])) {

        $this->timestamp = mktime(11, 59, 59, $inputdate["mon"], $inputdate["mday"], $inputdate["year"]);

        return true;
    }

    return false;       
}

function setYearStart($year) {
    $this->yearstart = $year;
}

function setYearEnd($year) {
    $this->yearend = $year;
}

function getYearStart() {
    if ($this->yearstart < 0) {
        $nowarray = getdate(time());
        $this->yearstart = $nowarray[year]-5;
    }

    return $this->yearstart;
}

function getYearEnd() {
    if ($this->yearend < 0) {
        $nowarray = getdate(time());
        $this->yearend = $nowarray[year]+5;
    }
    return $this->yearend;
}

function output() {
    if ($this->timestamp < 0) {
        $this->$setDate_global();
    }
    $datearray = getdate($this->timestamp);
    $out = $this->day_select($this->name, $datearray);
    $out .= $this->month_select($this->name, $datearray);
    $out .= $this->year_select($this->name, $datearray);
    return $out;
}

function day_select($fieldname, $datearray) {
    $out = "<select name=\"$fieldname"."[mday]\">\n";
    for ($x=1; $x<=31; $x++) {
        $out .="<option value=\"$x\"".($datearray["mday"]==($x)?" SELECTED":"").">".sprintf("%02d", $x)."\n";
    }
    $out .="</select>\n";
    return $out;
}

function month_select($fieldname, $datearray) {
    $out = "<select name=\"$fieldname"."[mon]\">\n";
    for ($x=1; $x<=12; $x++) {
        $out .="<option value=\"".($x)."\"".($datearray["mon"]==($x)?" SELECTED":"")."> ".$this->months[$x-1]."\n";
    }
    $out .="</select>\n";
    return $out;
}

function year_select($fieldname, $datearray) {
    $out = "<select name=\"$fieldname"."[year]\">";
    $start = $this->getYearStart();
    $end = $this->getYearEnd();
    for ($x=$start; $x<$end; $x++) {
        $out .="<option value=\"$x\"".($datearray["year"]==($x)?" SELECTED":"".">$x\n";
    }
    $out .="</select>\n";
    return $out;
}
}
?>

そして、表示(含む)ページのコード:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Example 12.4 - Using the date_pulldown Class</title>
</head>
<?php
include("date_pulldown.php");
$date1 = new date_pulldown("fromdate");
$date2 = new date_pulldown("todate");
$date3 = new date_pulldown("foundingdate");
$date3->setYearStart(1972);
if (empty($foundingdate)) 
    $date3->setDate_array(array('mday'=>26, 'mon'=>4, 'year'=>1984));
?>
<body>
<form>
    From:<br />
    <?php print $date1->output(); ?><br /><br />
    To:<br />
    <?php print $date2->output(); ?><br /><br />
    Company founded:<br />
    <?php print $date3->output(); ?><br /><br />
    <input type="submit" />
</form>    
</body>
</html>
4

3 に答える 3

11

$記号がありません:

if (!this->setDate_array($GLOBALS['$this->name'])) {

する必要があります

if (!$this->setDate_array($GLOBALS['$this->name'])) {
于 2013-03-05T16:48:56.600 に答える
11
if (!this->setDate

この行には$beforeがないthisためthis、定数として扱われますが、これは存在しないため、文字列として扱われ、後にはありません->

于 2013-03-05T16:48:57.907 に答える
0

上記に加えてif (!thisif (!$this

また、関数内の次の行に再度アクセスする必要がありますyear_select

$out .="<option value=\"$x\"".($datearray["year"]==($x)?" SELECTED":"".">$x\n";

次のように変更する必要があるようです:(
私が行ったいくつかの変更は、他の関数からの書式設定に一致させることでした。一貫性がないようです)

$out .= "<option value=\"".$x."\"".($datearray["year"]==($x)?" SELECTED":"").">".$x."\n";
于 2013-03-05T17:02:37.727 に答える