2016-09-09 44 views
0

實現接口DateTimeInterface,Xero的API我下面這個wrapper發票:: setDueDate()必須使用calcinai

我有這樣的錯誤:開捕致命錯誤:傳遞給XeroPHP \型號\會計\發票參數1 :: setDueDate()必須實現接口DateTimeInterface,串給出

這是我的代碼:

try{ 
      $lineitem = new LineItem($this->_xi); 
      $lineitem->setAccountCode('200') 
      ->setQuantity('5.400') 
      ->setDescription('this is awesome test') 
      ->setUnitAmount('9900.00'); 

      $contact = new Contact($this->_xi); 
      $contact->setName("John Doe") 
       ->setFirstName("John") 
       ->setLastName("Doe") 
       ->setEmailAddress("[email protected]") 
       ->setContactStatus(Contact::CONTACT_STATUS_ACTIVE); 



      $invoice = new Invoice($this->_xi); 
      $invoice->setType(Invoice::INVOICE_TYPE_ACCREC) 
       ->setStatus(Invoice::INVOICE_STATUS_AUTHORISED) 
       ->setContact($contact) 
       //->setDate(\DateTimeInterface::format("Y-m-d")) 
       ->setDueDate("2018-09-09") 
       ->setLineAmountType(Invoice::LINEAMOUNT_TYPE_EXCLUSIVE) 
       ->addLineItem($lineitem) 
       ->setInvoiceNumber('10') 
       ->save(); 



     }catch (Exception $e){ 
      $GLOBALS['log']->fatal('[Xero-createContact]-' . $e->getMessage()); 
      echo $e->getMessage(); 

     } 

,當我試圖做這樣的:

->setDueDate(\DateTimeInterface::format("Y-m-d")) 

我得到這個錯誤,而不是:致命錯誤:非靜態方法DateTimeInterface ::格式()不能靜態調用,假設$這種在不兼容的情況下

這是setDueDate的功能,我我打電話:

/** 
    * @param \DateTimeInterface $value 
    * @return Invoice 
    */ 
public function setDueDate(\DateTimeInterface $value) 
    { 
     $this->propertyUpdated('DueDate', $value); 
     $this->_data['DueDate'] = $value; 
     return $this; 
    } 

我真的失去了這裏,以我怎麼用這個DateTimeInterface,我怎麼甚至可以設置使用它將來的日期,以及如何解決這一切的錯誤。

回答

2

第一個錯誤說,該->setDueDate($date)方法希望它實現了DateTimeInterface的對象,但是你提供的只是一個字符串,而不是->setDueDate("2018-09-09")

第二個錯誤說,該format($format)方法不能被靜態調用。它需要一種格式模式,並根據所提供的模式將現有對象格式化爲字符串。然而,你試圖靜態調用它,提供日期字符串,而不是格式模式 - 難怪它失敗了。您需要使用createFromFormat($format, $date_string)方法,該方法從字符串中創建一個對象,而不是其他方法。

解決方案是創建一個實現DateTimeInterface的對象。例如DateTimeDateTimeImmutable(這是相同的,但從未修改)。如果您稍後可能修改此值,我建議您使用DateTime。

因此改變這一行:
->setDueDate("2018-09-09")
這樣:
->setDueDate(\DateTime::createFromFormat('Y-m-d', "2018-09-09"))
,它應該工作就像一個魅力。

+0

其他發佈的答案工作,但我想知道爲什麼作者刪除它。非常感謝你的解釋和真正的幫助。 – hungrykoala