2011-10-24 23 views
5

¿Es posible definir un argumento de función como múltiples tipos posibles? Por ejemplo, una función puede tomar una cadena o un número entero para lograr algo. ¿Es posible de alguna manera definirlo así?Definición de tipos de argumento de función múltiple en PHP

function something(int|string $token) {} 

¿O solo se admite un tipo por argumento?

(eso sí, sé que puedo filtrar la entrada más adelante, me gusta tener mis argumentos mecanografiadas)

Respuesta

2

Lo mejor que puede hacer es llamado Tipo Hinting y se explica aquí:

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

En particular, puede indicar un tipo de clase o un tipo de matriz, pero (como dice el manual) "No se admite la sugerencia de tipo tradicional con int y cadena". Así que supongo que lo que estás tratando de lograr no es posible en este nivel.

Sin embargo, puede crear sus propios envoltorios, etc. Probablemente haya mil maneras de manejar esto.

+1

Cheers, por fin sabemos que se llama Tipo Hinting ahora. – Swader

+1

Se llama Hinting en PHP (¿solo?) Porque de hecho es solo una pista para el intérprete de PHP, que por lo tanto recibe la instrucción de verificar "artificialmente" el tipo de argumento y lanzar un error si no coincide con la sugerencia. En los lenguajes de tipo estático es una cosa básica y necesaria, parte de la sintaxis de las funciones, y no se llama así ... de hecho, no creo que tenga un nombre específico de otra manera ... – Palantir

+0

Eso es muy bueno para saber, gracias! – Swader

0

PHP se escribe dinámicamente - pero dando a entender el tipo ha sido añadido a la lengua - por lo que si usted no ha insinuado el parámetro que puede pasar cualquier tipo que te gusta:

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

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

(fuera de la en lo más alto de mi cabeza, no estoy seguro de cómo se manejan los recursos).

Sin embargo, si se desea programar en un lenguaje fuertemente tipado, entonces (en mi humilde opinión) que debe usar algo que no sea PHP

+0

'is_numeric' también incluye cadenas numéricas, pero no recursos. – deceze

+0

Gracias, solo estoy tratando de optimizarlo para HipHop. – Swader

Cuestiones relacionadas