2011-10-24 5 views
5

E 'possibile definire un'argomento di funzione, come più tipi di possibili? Ad esempio, una funzione può richiedere una stringa o un intero per realizzare qualcosa. È possibile definirlo in qualche modo in questo modo?Definizione più tipi di funzione di argomento in PHP

function something(int|string $token) {} 

Oppure è supportato un solo tipo per argomento?

(si badi bene, so che posso filtrare ingresso più tardi, ho solo piace avere i miei argomenti digitati)

risposta

2

Il meglio che puoi fare è chiamato Type Hinting ed è spiegato qui:

http://php.net/manual/en/language.oop5.typehinting.php

In particolare, si può suggerire un tipo di classe o di un tipo di matrice, ma (come il manuale dice) "tipo di hinting tradizionale con int e la stringa non è supportato." Quindi immagino che ciò che stai cercando di realizzare non sia possibile a questo livello.

Tuttavia, è possibile creare i propri involucri, ecc Ci sono probabilmente mille modi per gestire questo.

+1

Cheers, finalmente so che si chiama Type Hinting ora. – Swader

+1

Si chiama Hinting in PHP (solo?), Perché è in realtà solo un suggerimento per l'interprete PHP, che viene così incaricato di "artificialmente" verificare il tipo di argomento e genera un errore se non corrisponde con il suggerimento. Nei linguaggi tipizzati staticamente è una cosa di base e richiesta, parte della sintassi per le funzioni, e non è chiamata così ... in effetti non penso che abbia un nome specifico altrimenti ... – Palantir

+0

Questo è molto buono per lo so, grazie! – Swader

0

PHP è dinamicamente tipizzato - ma il tipo di hinting è stato aggiunto al linguaggio - quindi se non avete ha accennato il parametro che si può passare qualsiasi tipo che ti piace:

function something($token) 
{ 
    if (is_numeric($token)) { 
    // its a float, double, integer 

    } else { 
    // its a string, array, object 
    } 
} 

(fuori in cima alla mia testa non sono sicuro di come vengono gestite le risorse).

Tuttavia, se si vuole programmare in un linguaggio fortemente tipizzato, quindi (secondo me) si dovrebbe usare qualcosa di diverso da PHP

+0

'is_numeric' include anche stringhe numeriche, ma non risorse. – deceze

+0

Grazie, sto solo cercando di ottimizzarlo per HipHop. – Swader