2011-11-28 11 views
8

¿Hay alguna manera en que pueda hacer que mi función PHP devuelva un tipo de valor diferente? El siguiente código debe explicar lo que quiero decir:¿Puede una función tener múltiples tipos de valor de retorno en PHP?

<?php 
public function test($value){ 
    if($value == 1){ 
     return "SUCCESS"; 
    } else { 
     return false; 
    } 
} 
?> 

Con una condición Voy a devolver una cadena, por lo demás estoy volviendo un valor lógico. Es eso permitido/posible?

+0

Quizás quiso probarlo? – JJJ

+4

No es posible si le importan las buenas prácticas :) – Esailija

+1

El hecho de que * puede * no significa que * debería *. – thetaiko

Respuesta

14

Sí. PHP está tipeado libremente, por lo que cualquier variable puede tomar cualquier tipo. Los valores de retorno de función no son una excepción.

+1

Y vale la pena agregar que * muchas * funciones nativas de php hacen esto. De hecho, el manual llama a esto el tipo de devolución "mixta". – goat

+1

@chris E incluso si el tipo de devolución no está mezclado, la función normalmente devuelve el tipo de devolución especificado o falso/nulo. Así que sí, bastante común :) – NikiC

+0

No es posible en PHP 7 con el modo scrict activado – PiKey

-3

¿Eso está permitido/posible?

Yep.

0

Sí, eso es permitido, no como en C, Java, ..., donde se tiene que definir el retorno ..

0

Está permitido. Sin embargo, no es aconsejable en el caso que usted dio. Para un ejemplo donde esto tiene sentido, eche un vistazo a, por ejemplo, strpos() función.

3

Sí, es posible (pero no recomendable).

Al menos debe declarar en su comentario Javadoc

/** 
* @param int $value 
* @return mixed string|boolean 
**/ 
public function test($value){ 
    if($value == 1){ 
     return "SUCCESS"; 
    } else { 
     return false; 
    } 
} 

Incluso de PHP construido en funciones de hacerlo a veces (por ejemplo mysql_connect => booleano | enlace de recursos)

0

Me pregunto acerca de esto por mí mismo, ¿por qué devolver algo que es diferente? ¿Entonces el receptor recibe dos cosas para verificar? Creo que me he decidido a devolver una versión vacía del tipo o una matriz con un elemento de estado.

Dos ejemplos, cómo las cosas pueden cambiar dentro de una función/método, y que están básicamente obligados a marcar más de lo esperado:

<?php 
function test($value){ 
if($value == 1){ 
    $local = successFunction($value); 
    return $local; 
} else { 
    return false; 
} 
} 

$res = test(1); 
if ($res) { 
    echo "We are OK ? Right? No? What is this?"; 
} 

versión 2

function test($value){ 
if($value == 1){ 
    $local = successFunction($value); 
    return $local; 
} else { 
    return ""; 
} 
} 

$res = test(1); 
    if (!empty($res)) { 
     echo "more likely we are ok"; 
    } 
?> 
Cuestiones relacionadas