поздняя статическая привязка php исправляет ошибку, ожидающую T_FUNCTION - PullRequest
1 голос
/ 25 апреля 2011

Я новичок в ООП, и я работал над этим примером, но я не могу избавиться от этой ошибки

Parse error: syntax error, unexpected ';', expecting T_FUNCTION in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\...\php_late_static_bindings.php on line 16

Я пытался выполнить следующий код:

abstract class father {
    protected $lastname="";
    protected $gender="";

    function __construct($sLastName){
        $this->lastname = $sLastName;
    }

    abstract function getFullName();

    public static function create($sFirstName,$sLastName){
        return new self($sFirstName,$sLastName);
    };
}

class boy extends father{
    protected $firstname="";

    function __construct($sFirstName,$sLastName){
        parent::__construct($sLastName);
        $this->firstname = $sFirstName;
    }

    function getFullName(){
        return("Mr. ".$this->firstname." ".$this->lastname."<br />");
    }
}

class girl extends father{
    protected $firstname="";

    function __construct($sFirstName,$sLastName){
        parent::__construct($sLastName);
        $this->firstname = $sFirstName;
    }

    function getFullName(){
        return("Ms. ".$this->firstname." ".$this->lastname."<br />");
    }

}


$oBoy = boy::create("John", "Doe");
print($oBoy->getFullName());

У кого-нибудь есть идеи? $ oGirl = girl :: create ("Джейн", "Доу"); печать ($ oGirl-> getFullName ());

Ответы [ 2 ]

1 голос
/ 25 апреля 2011

Сначала вам нужно удалить точку с запятой после определения вашего метода :

public static function create($sFirstName,$sLastName){
    return new self($sFirstName,$sLastName);
} // there was a semi-colon, here


Затем вы, вероятно, захотите использовать static,а не self, здесь:

public static function create($sFirstName,$sLastName){
    return new static($sFirstName,$sLastName);
}

Объяснение:

  • self указывает на класс, в котором оно написано - здесь, father class, который является абстрактным и не может быть создан.
  • static, с другой стороны, означает позднее статическое связывание - и здесь он будет указывать на ваш boyучебный класс ;это тот, который вы хотите создать.
0 голосов
/ 25 апреля 2011

Сообщения об ошибках PHP обычно довольно хороши.Просто прочитайте ошибку.Проблема здесь:

public static function create($sFirstName,$sLastName){
    return new self($sFirstName,$sLastName);
};

Снимите точку с запятой.

public static function create($sFirstName,$sLastName){
    return new self($sFirstName,$sLastName);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...