2010-05-10 20 views

risposta

8

Invece di un array, utilizzare un array associativo e trasmetterlo a un oggetto, che consente di accedere agli elementi utilizzando la sintassi dell'oggetto ->:

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

// sii consapevole che stai chiamando un() tre volte qui ... –

2

Se si vuole accedere a tali variabili in questo modo (senza l'utilizzo di una matrice), è necessario utilizzare al meglio una classe:

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

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

Questo codice è sbagliato, dovresti dichiarare e assegnare variabili in questo modo: 'var $ a =" a "', o meglio usa parole chiave di visibilità esplicita: 'public $ a = 'a'',' protected $ a =' a'' o 'private $ a =' a'' –

+0

Sì, lo so ... l'ho scritto così perché funziona su PHP4 e PHP5. È davvero stupido, ma ci sono milioni di server PHP4 là fuori (php4 non supporta i modificatori di accesso), e gli amministratori sono troppo pigri per l'aggiornamento: D – Cristian

+0

Chiunque usi ancora php4 deve essere girato. – 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

È possibile creare una classe e restituire un oggetto. Dai un'occhiata a this SO answer per qualcosa che potresti trovare utile.

3

Creare una classe che contenga le 3 variabili e restituisca un'istanza della classe. Esempio:

<?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; 
?> 

Naturalmente gli ultimi 3 linee non sono particolarmente efficienti perché a() viene chiamato 3 volte. Un refactoring sensibile comporterebbe quei 3 linee essendo cambiata in:

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

Sì questo è possibile quando la variabile di ritorno deve essere un array o dovrebbe essere lunga stringa con più valori separati con qualsiasi delimitatori, ", | #" e così via.

se è costruito come un array possiamo ricevere utilizzando var_dump funzione disponibile in PHP

vedi sotto codice

var_dump($array);

+0

Il ritorno di una stringa che deve essere analizzata sarebbe molto brutto. – ThiefMaster

1

PHP Manual > Returning values:

una funzione non può restituire più valori, ma risultati simili possono essere ottenuti restituendo un array.

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

alcuna necessità per le classi qui.

Problemi correlati