2010-05-10 17 views

Trả lời

8

Thay vì một mảng, bạn có thể sử dụng mảng kết hợp và truyền nó vào một đối tượng, cho phép bạn truy cập các phần tử bằng cách sử dụng cú pháp đối tượng ->:

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

// lưu ý rằng bạn đang gọi một() ba lần ở đây ... –

2

Nếu bạn muốn truy cập những biến cách (mà không sử dụng một mảng), bạn nên sử dụng tốt hơn một lớp:

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

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

Mã này sai, bạn nên khai báo và gán biến theo cách này: 'var $ a =" a "' hoặc sử dụng từ khóa hiển thị rõ ràng hơn: 'public $ a = 'a'',' protected $ a =' a'' hoặc 'private $ a = 'a'' –

+0

Vâng tôi biết ... Tôi đã viết nó theo cách đó bởi vì nó hoạt động trên PHP4 và PHP5. Nó thực sự ngớ ngẩn, nhưng có hàng triệu máy chủ PHP4 ngoài kia (php4 không hỗ trợ các công cụ sửa đổi truy cập), và quản trị viên quá lười để nâng cấp: D – Cristian

+0

Bất cứ ai vẫn sử dụng php4 cần phải được quay. – 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

Bạn có thể tạo lớp và trả lại đối tượng thay thế. Hãy xem this SO answer để biết điều gì đó mà bạn có thể thấy hữu ích.

3

Tạo lớp có chứa 3 biến của bạn và trả về phiên bản của lớp. Ví dụ:

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

Tất nhiên 3 dòng cuối cùng không hiệu quả đặc biệt vì a() được gọi là 3 lần. Một refactoring hợp lý sẽ dẫn đến những 3 dòng được đổi thành:

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

Có điều này là có thể khi biến trở có trở thành như một mảng hoặc nó nên chuỗi dài với nhiều giá trị tách ra với bất kỳ delimiters như ", | #" v.v.

nếu nó được xây dựng như một mảng chúng ta có thể nhận được nó sử dụng var_dump chức năng có sẵn trong PHP

xem dưới đây đang

var_dump($array);

+0

Trả về một chuỗi cần được phân tích cú pháp sẽ rất xấu. – ThiefMaster

1

PHP Manual > Returning values:

Một chức năng không thể trở về nhiều giá trị, nhưng có thể thu được các kết quả tương tự bằng cách trả về một mảng.

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

không cần lớp học ở đây.

Các vấn đề liên quan