2011-04-25 49 views
1

我是新來OOP,我一直在這個例子中,但我似乎無法擺脫這種錯誤PHP後期靜態綁定revieve錯誤期待T_FUNCTION

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(「Jane」,「Doe」); print($ oGirl-> getFullName());

+0

'return new static' should be the call。因爲否則它會嘗試實例化抽象類(這將失敗)......但第16行是什麼? – ircmaxell 2011-04-25 19:29:14

回答

1

你首先要刪除分號你的方法定義後那:

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

E xplanation:

  • self指向其所在類 - 在這裏,father類,它是抽象的,並且不能被實例化。
  • static,另一方面,意味着後期靜態綁定 - ,在這裏,將指向您的boy類;這是你想instanciate的人。
+0

+1但請記住,後期靜態綁定將只能從PHP 5.3起作用:) – NikiC 2011-04-25 19:37:31

+0

我刪除了分號並將自己改爲靜態我現在收到錯誤 解析錯誤:語法錯誤,意外的T_STATIC,期望T_STRING或T_VARIABLE或'$'在C:\ Program Files文件(x86)\ Apache Software Foundation \ Apache2.2 \ htdocs \ brjulias_dev \ php_late_static_bindings.php在線14 – 2011-04-25 19:49:30

+0

Heu ...你確定你正在使用PHP> = 5.3?後期靜態綁定不存在與PHP <5.3 – 2011-04-25 19:52:47

0

PHP的錯誤報告通常很不錯。只要閱讀錯誤。問題在於:

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

刪除訓練分號。

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

好吧,解決了這個問題,我不能相信我錯過了 – 2011-04-25 19:36:32

相關問題