1

私は OOP を初めて使用し、この例に取り組んできましたが、このエラーを取り除くことができないようです

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("ジェーン", "ドウ"); print($oGirl->getFullName());

4

2 に答える 2

1

まず、メソッド定義の後にあるセミコロンを削除する必要があります:

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


次に、ここでは ではなくを使用することをお勧めします。staticself

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

説明 :

  • selfそれが書かれているクラスを指します -- ここでは、father抽象的でインスタンス化できないクラスです。
  • static一方、は遅延静的バインディングboyを意味し、ここではクラスを指します。インスタンス化したいものです。
于 2011-04-25T19:31:51.610 に答える
0

通常、PHP のエラー報告は非常に優れています。エラーを読むだけです。問題はここにあります:

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

トレーニング セミコロンを削除します。

public static function create($sFirstName,$sLastName){
    return new self($sFirstName,$sLastName);
}
于 2011-04-25T19:29:45.013 に答える