2012-11-14 16 views
44

ho ottenuto questo errore durante il debug il mio codice:PHP Parse: errore di sintassi, T_OBJECT_OPERATOR inaspettato

PHP Parse error: syntax error, unexpected T_OBJECT_OPERATOR in order.php on line 72

Ecco un frammento di codice (a partire da linea 72):

$purchaseOrder = new PurchaseOrderFactory->instance(); 
$arrOrderDetails = $purchaseOrder->load($customerName); 

risposta

71

Purtroppo, non è possibile chiamare un metodo su un oggetto appena creato con new prima di PHP 5.4.

In PHP 5.4 e versioni successive, è possibile utilizzare il seguente:

$purchaseOrder = (new PurchaseOrderFactory)->instance(); 

Nelle versioni precedenti, è necessario chiamare il metodo su una variabile:

$purchaseFactory = new PurchaseOrderFactory; 
$purchaseOrder = $purchaseFactory->instance(); 

Nota: Più tardi è probabilmente ancora più utile/saggio anche dopo aver aggiornato a PHP 5.4 perché queste due linee possono essere meglio separate e c'è meno codice contenente un nome di classe hard-encoded, qui il nome della classe factory PurchaseOrderFactory. Ciò ti renderà più fluido mantenendo il codice nel tempo.

+2

Anche se ha usato il suo codice su PHP 5.4 che genererebbe un errore di sintassi. –

+0

Ricevo questo errore su PHP 5.5.9 –

3

cambiamento come la sintassi non era valido:

$purchaseOrder = PurchaseOrderFactory::instance(); 
$arrOrderDetails = $purchaseOrder->load($customerName); 

dove presumibilmente instance() crea un'istanza della classe . Si può fare questo piuttosto che dire new

+0

questo codice funziona per la versione 4.9 di php. Ma perché si verifica questo errore? –

1

Non è possibile utilizzare (è sintassi non valida php):

new PurchaseOrderFactory->instance(); 

Probabilmente dire una di quelle:

// Initialize new object of class PurchaseOrderFactory 
new PurchaseOrderFactory(); 

// Clone instance of already existing PurchaseOrderFactory 
clone PurchaseOrderFactory::instance(); 

// Simply use one instance 
PurchaseOrderFactory::instance(); 

// Initialize new object and that use one of its methods 
$tmp = new PurchaseOrderFactory(); 
$tmp->instance(); 
Problemi correlati