2010-05-10 4 views

ответ

8

Вместо массива, может использовать ассоциативный массив и передать его объекту, который позволяет вам получить доступ к элементам с помощью синтаксиса объекта ->:

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

// Помните, что вы вызываете() три раза здесь ... –

2

Если вы хотите получить доступ к этим переменным, что путь (без использования массива), то лучше использовать класс:

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

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

Этот код является неправильным, вы должны объявлять и присваивать переменные таким образом: 'var $ a =" a "или лучше использовать явные ключевые слова видимости: public public a a ',' protected $ a =' a'' или 'private $ a = 'a'' –

+0

Да, я знаю ... Я написал так, потому что он работает на PHP4 и PHP5. Это действительно глупо, но есть миллионы серверов PHP4 (php4 не поддерживает модификаторы доступа), а администраторы слишком ленивы для обновления: D – Cristian

+0

Любой, кто все еще использует php4, должен быть застрелен. – 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

Вы можете построить класс и вместо него вернуть объект. Проверьте this SO answer за то, что может показаться вам полезным.

3

Создайте класс, содержащий ваши 3 переменные и возвращающий экземпляр класса. Пример:

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

Конечно последние 3 строки не являются особенно эффективными, поскольку a() вызывается 3 раза. Разумный рефакторинга приведет в этих 3-х линий изменяется на:

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

Да, это возможно, когда переменная возврат должен быть массивом или она должна быть длинная строка с несколькими значениями, разделенными с любым из ограничителей, как ", | #" и так далее.

, если он построен в виде массива, мы можем получить его с помощью var_dump функции, доступные в PHP

см ниже код

var_dump($array);

+0

Возвращение строки, которая должна быть проанализирована, будет очень уродливой. – ThiefMaster

1

PHP Manual > Returning values:

Функция не может вернуться несколько значений, но аналогичные результаты можно получить, возвратив массив.

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

нет необходимости для классов здесь.

Смежные вопросы