2010-05-10 14 views
7

¿Puede una función de PHP devolver una gran cantidad de variables sin matriz?¿Puede una función PHP devolver muchos vars?

quiero así:

<?php 

public function a() 
{ 
    $a = "a"; 
    $b = "b"; 
    $c = "c"; 

} 

echo a()->a; 
echo a()->b; 
echo a()->c; 

?> 

¿Cómo puedo acceder a $ a, $ b, $ c vars?

Respuesta

8

En lugar de una matriz, podría usar una matriz asociativa y convertirla en un objeto, que le permite acceder a los elementos usando la sintaxis del objeto ->:

function a() 
{ 
    return (object) array(
    'a' => "a", 
    'b' => "b", 
    'c' => "c"); 
} 

echo a()->a; // be aware that you are calling a() three times here 
echo a()->b; 
echo a()->c; 
+0

// tenga en cuenta que está llamando a() tres veces aquí ... –

2

Si desea acceder a las variables de esa manera (sin necesidad de utilizar una matriz), se debe utilizar mejor una clase:

class Name{ 
    var $a = "a"; 
    var $b = "b"; 
} 

$obj = new Name(); 
echo $obj->a; 
+0

Este código es incorrecto, debe declarar y asignar variables de esta manera: 'var $ a =" a "', o mejor use palabras clave de visibilidad explícita: 'public $ a = 'a'',' protected $ a =' a'' o 'private $ a = 'a'' –

+0

Sí, lo sé ... Lo escribí de esa manera porque funciona en PHP4 y PHP5. Es realmente una tontería, pero hay millones de servidores PHP4 (php4 no admite modificadores de acceso) y los administradores son demasiado perezosos para actualizar: D – Cristian

+0

. Cualquier persona que todavía use php4 necesita ser fotografiada. – ThiefMaster

6
function a1() { 
    return array(
     'a' => 'a', 
     'b' => 'b', 
     'c' => 'c' 
    ); 
} 
$a1 = a1(); 
echo $a1['a']; 
echo $a1['b']; 
echo $a1['c']; 

function a2() { 
    $result = new stdClass(); 
    $result->a = "a"; 
    $result->b = "b"; 
    $result->c = "c"; 
    return $result; 
} 
$a2 = a2(); 
echo $a2->a; 
echo $a2->b; 
echo $a2->c; 
// or - but that'll result in three function calls! So I don't think you really want this. 
echo a2()->a; 
echo a2()->b; 
echo a2()->c; 
2

Puede crear una clase y devolver un objeto en su lugar. Consulte this SO answer para obtener información que pueda serle útil.

3

Crea una clase que contenga tus 3 variables y devuelva una instancia de la clase. Ejemplo:

<?php 
class A { 
    public $a; 
    public $b; 
    public $c; 

    public function __construct($a, $b, $c) { 
     $this->a = $a; 
     $this->b = $b; 
     $this->c = $c; 
    } 
} 

function a() { 
    return new A("a", "b", "c"); 
} 

echo a()->a; 
echo a()->b; 
echo a()->c; 
?> 

Por supuesto, las últimas 3 líneas no son particularmente eficientes porque a() se llama a 3 veces. A refactorización sensata resultaría en esos 3 líneas de ser cambiado a:

$a = a(); 
echo $a->a; 
echo $a->b; 
echo $a->c; 
1

Sí Esto es posible cuando la variable de retorno tiene que ser como una matriz o que debe ser larga cadena con varios valores separados con cualquiera de los delimitadores como ", | #" y así sucesivamente.

si se construye como una matriz que puede recibirlo usando var_dump función disponible en PHP

véase a continuación Código

var_dump($array);

+0

Devolver una cadena que necesita ser analizada sería muy feo. – ThiefMaster

1

PHP Manual > Returning values:

una función no puede devolver valores múltiples, pero se pueden obtener resultados similares devolviendo una matriz.

<?php 
function small_numbers() 
{ 
    return array (0, 1, 2); 
} 
list ($zero, $one, $two) = small_numbers(); 

sin necesidad de clases aquí.

Cuestiones relacionadas