a

Câu hỏi Sự khác nhau giữa `$ this-> name` và` $ this -> $ name` là gì?


Tôi tự hỏi sự khác biệt giữa $this->name và $this->$name? Cũng vậy $this phải được đặt tên đúng điều này hoặc nó có thể là bất cứ điều gì?


12
2018-02-05 05:19


gốc




Các câu trả lời:


$this là tên biến dành riêng và không thể sử dụng cho bất kỳ thứ gì khác. Nó đặc biệt chỉ cho bạn đối tượng mà bạn hiện đang làm việc. Bạn phải sử dụng $this vì bạn không biết đối tượng biến nào sẽ được gán cho.

$this->name đề cập đến biến của lớp hiện tại name

$this->$name đề cập đến biến lớp của bất kỳ giá trị nào của $name Là. Như vậy

$name = "name";
echo $this->$name; // echos the value of $this->name.

$name = "test";
echo $this->$name;  // echos the value of $this->test

20
2018-02-05 05:22





$ this là tên dành riêng được sử dụng trong PHP để trỏ đến cá thể hiện tại của lớp bạn đang sử dụng trong (trích dẫn) :

Biến giả $this có sẵn   khi một phương thức được gọi từ bên trong một   ngữ cảnh đối tượng.
$this là một tham chiếu   đối tượng gọi (thường là   đối tượng mà phương thức thuộc về,   nhưng có thể là một đối tượng khác, nếu   phương thức được gọi là tĩnh từ   bối cảnh của một đối tượng phụ).


Khi đang sử dụng $this->name, bạn đang truy cập thuộc tính với tên name của đối tượng hiện tại.


Khi đang sử dụng $this->$name, $ name được xác định trước khi truy cập thuộc tính - có nghĩa là bạn sẽ truy cập thuộc tính có tên được chứa trong $name biến cục bộ.

Ví dụ: với phần mã này:

$name = 'abc';
echo $this->$name;

Bạn sẽ thực sự lặp lại nội dung của thuộc tính abc, như thể bạn đã viết:

echo $this->abc;

Khi làm điều này, bạn đang sử dụng biến biến  (trích dẫn) :

Thuộc tính lớp cũng có thể được truy cập   sử dụng tên thuộc tính biến.
Các   tên thuộc tính biến sẽ là   được giải quyết trong phạm vi mà từ đó   cuộc gọi được thực hiện.
Ví dụ, nếu bạn   có một biểu thức như $foo->$bar,   thì phạm vi cục bộ sẽ được kiểm tra   cho $bar và giá trị của nó sẽ được sử dụng như   tên của tài sản $foo.
Điều này   cũng đúng nếu $ bar là một mảng   truy cập.


6
2018-02-05 05:25



Bạn có lỗi trong cú pháp của mình. Trộn dấu nháy đơn với dấu ngoặc kép là chúng ta? (Cố gắng sửa chữa nó, và bạn ghi đè lên tôi) - Tyler Carter
@Chacha: ergh, một lần nữa, quá sớm vào buổi sáng ^ ^ cảm ơn đã nhận thấy rằng :-) - huhu, cả hai chúng tôi đã chỉnh sửa câu trả lời của mình để sửa vấn đề đó, tôi thấy :-D ;; và chúng tôi đã chỉnh sửa nhận xét của mình cùng một lúc, quá :-D - Pascal MARTIN
Nếu chúng tôi đã lập trình, chúng tôi sẽ bị chìm khi StackOverflow không có chú thích kiểm tra / khóa :) - Tyler Carter
Nếu chúng tôi đang lập trình, chúng tôi sẽ sử dụng giao dịch hoặc có một số xung đột khi cố gắng thực hiện các sửa đổi của chúng tôi ^^ (tốt, ít nhất là cho phiên bản của câu trả lời) - Pascal MARTIN
Tôi nghĩ ai đó đã gợi ý rằng với Jeff. Có lẽ anh ta sẽ lắng nghe nó sau khi hes ngừng tự nhủ rằng bộ đếm thời gian bình luận trượt tốt đến mức nào ... - Tyler Carter


Câu hỏi này vừa xuất hiện sau khi cập nhật. Tôi thích câu hỏi này, vì vậy tôi nghĩ tôi sẽ thêm ví dụ của riêng mình về sự khác biệt.

class Test
{
    public $bar = 'bar';
    public $foo = 'foo';

    public function __construct()
    {
        $bar = 'foo';

        $this->bar; // bar
        $this->$bar; // foo
    }
}

2
2017-08-22 01:31