2009-05-12 49 views
36

Làm cách nào tôi có thể tham chiếu thuộc tính lớp chỉ biết một chuỗi?

class Foo 
{ 
    public $bar; 

    public function TestFoobar() 
    { 
     $this->foobar('bar'); 
    } 

    public function foobar($string) 
    { 
     echo $this->$$string; //doesn't work 
    } 
} 

cách chính xác để đánh giá chuỗi là gì?

Trả lời

62

Bạn chỉ cần sử dụng một $ khi tham chiếu biến thành viên của đối tượng bằng biến chuỗi.

echo $this->$string; 
3

bạn đã rất thân thiết. bạn chỉ cần thêm 1 dấu $.

public function foobar($string) 
{ 
    echo $this->$string; //will work 
} 
0
echo $this->$string; //should work 

Bạn chỉ cần $$string khi truy cập vào một biến địa phương chỉ có tên của nó được lưu trữ trong một chuỗi. Vì bình thường trong một lớp học bạn truy cập nó như $obj->property, bạn chỉ cần thêm một $.

18

Như những người khác đã đề cập, $ this -> $ string nên thực hiện thủ thuật.

Tuy nhiên, đây

$this->$$string; 

sẽ thực sự đánh giá chuỗi, và đánh giá lại kết quả về điều đó.

$foo = 'bar'; 
$bar = 'foobar'; 
echo $$foo; //-> $'bar' -> 'foobar' 
0

Để ghi nhớ cú pháp chính xác, hãy nhớ rằng bạn sử dụng số $ nhiều hơn mức bạn thường sử dụng. Khi bạn sử dụng $object->property để truy cập thuộc tính đối tượng, khi đó, quyền truy cập động được thực hiện với $object->$property_name.

27

Nếu bạn muốn sử dụng một giá trị tài sản để lấy tên của một bất động sản, bạn cần phải sử dụng "{" dấu ngoặc:

$this->{$this->myvar} = $value; 

Ngay cả khi họ đang đối tượng, họ làm việc:

$this->{$this->myobjname}->somemethod(); 
+0

Điều này đã làm cho tôi (PHP 5.2) – doublejosh

+0

Thật tuyệt vời khi PHP cho phép các cấu trúc này! Nhưng cũng có thể khá mơ hồ với người khác – MDijkstra

+0

Nó cũng tiện dụng nếu bạn kết hợp chữ với chữ số động vd: '$ this -> {" my_prop _ ". $ I}' –

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