2010-10-22 97 views
1

錯誤:錯誤在PHP代碼

Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE in 
PSubscriptionFile.php on line 90; 

我認爲公共靜態_fromJSON應該是公開的

static function _fromJSON 

但給予致命錯誤:

Declaration of PSubscriptionFile::__construct() must be compatible with that of 
PuSHSubscriptionInterface::__construct() in PSubscriptionFile.php on line 9 

的文件:http://github.com/bobdia/PuSHSubscriber

我不明白如何解決這個錯誤。謝謝!

+3

90行是空的r github文件。請在這裏複製+粘貼相關代碼(前後90行+3行) – 2010-10-22 10:46:31

回答

12

你寫

public static _fromJSON($data) { 

,而不是

public static function _fromJSON($data) { 

致命錯誤,當你解決這個問題是因爲你的構造函數的簽名是不相同的構造函數簽名由interfacePuSHSubscriptionInterface要求,你就會得到它定義在您的底部PuSHSubscriber.php

public function __construct(
    $domain, $subscriber_id, $hub, 
    $topic, $secret, $status = '', 
    $callback_url, $verify_token, $lease_time=''); 

,而你是

public function __construct(
    $domain, $subscriber_id, $hub, 
    $topic, $secret, $status = '', 
    $callback_url, $verify_token, $lease_time) 

你需要做的最後一個參數。 The note in the PHP Manual明確表示:

The class implementing the interface must use the exact same method signatures as are defined in the interface. Not doing so will result in a fatal error.

接口的要點是有合同。實現這個契約的類不能改變接口定義的方法簽名,因爲這會破壞契約並破壞接口的目的。

當接口IFoo說,你應該有

public function fn($arg1, $arg2, $arg3 = NULL); 

然後實施IFoo每類必須實現的接口中定義的方法。

1

我只是做了一些跟進提到的問題。

  1. 原始源代碼 「PSubscriptionFile.php」(HERE)嘗試90. 線的誤差可以修改

    public static _fromJSON($data) { 
    

    public static function _fromJSON($data) { 
    
  2. 然後,如建議由Gordon修改「PSubscriptionFile」的第35行。PHP的」

    public function __construct($domain, $subscriber_id, $hub, $topic, $secret, $status = '', $callback_url, $verify_token, $lease_time) { 
    

    來(看線的末端)現在

    public function __construct($domain, $subscriber_id, $hub, $topic, $secret, $status = '', $callback_url, $verify_token, $lease_time='') { 
    
  3. ,你可能會看到錯誤消息(可能會略有不同)

    Warning: file_put_contents(./subscriptions/example_subs/1.pubsub) [function.file-put-contents]: failed to open stream: No such file or directory in C:\www\pubsub\PSubscriptionFile.php on line 52 
    

    *注:假設所有的文件都放入目錄「pubsub」,目錄「www」是Apache服務器的目錄。

    這是告訴你,你需要一個包含所有* .pubsub文件的目錄。 所以,看看你的源代碼文件「的index.php」(HERE)在24線 的代碼顯示該目錄的名稱應爲「example_subs」

    $domain = 'example_subs'; 
    

    然後,創建「example_subs」空目錄C:\ www \ pubsub \ example \ subscriptions

    最後,在訂閱之後,您會在目錄C:\ www \ pubsub \中找到一個名爲NUMBER.pubsub(例如:1.pubsub)示例\ subscriptions \ example_subs