Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR)

31,287

Solution 1

if (!this->setDate

This line is missing a $ before this, so this is being treated as a constant, which doesn't exist so is treated as a string, which can't have -> after it.

Solution 2

You are missing a $ sign:

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

should be

if (!$this->setDate_array($GLOBALS['$this->name'])) {
Share:
31,287
Shane Malone
Author by

Shane Malone

Updated on March 06, 2020

Comments

  • Shane Malone
    Shane Malone about 4 years

    I have a feeling this may be a simple syntax error that I'm just not seeing, as I've had a poke around the code and cannot figure out why I'm getting the above error. The code I'm working on is a tutorial from a SAMS books, on building a calendar class. For the record, I'm running PHP 5.4.7. The below code belongs to an include that I'll show below..

    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;
    }
    }
    ?>
    

    And the code for the display (including) page:

    <!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>
    
    • Keeleon
      Keeleon about 11 years
      Does the error give a line #?
    • John Conde
      John Conde about 11 years
      What is the exact and complete error message? Which line of code does it correspond to?
    • Keeleon
      Keeleon about 11 years
      Btw after you fix that you have an error in year_select(). $out .="<option value=\"$x\"".($datearray["year"]==($x)?" SELECTED":"".">$x\n"; should have a closing parens after the :""
    • Shane Malone
      Shane Malone about 11 years
      @JohnConde - sorry about that, the initial error was on line 14.
  • Shane Malone
    Shane Malone about 11 years
    Cheers, appreciate the little explanation too!