2011-08-24 47 views
12

Câu hỏi ngớ ngẩn mà tôi biết,Điều này thực sự có ý nghĩa gì> Codeigniter

Từ tất cả các hướng dẫn, họ không giải thích tại sao họ sử dụng $ this này.

Có phải $ này giống như một đối tượng từ một lớp cơ sở trong Codeigniter không?

Mọi lời giải thích sẽ được hoan nghênh! :)

Cảm ơn

+3

http://www.php.net/manual/en/language.oop5.basic.php để giới thiệu về chính '$ this' này. – mario

Trả lời

1

Tôi chỉ đọc một bài tuyệt vời về $ này và các lớp học nói chung: http://query7.com/using-this-in-php

Trong PHP, từ khóa “$ này” được sử dụng như một tài liệu tham khảo tự của một lớp và bạn có thể sử dụng nó để gọi và sử dụng các thuộc tính và phương pháp này như được hiển thị trong ví dụ dưới đây.

7

$this trong PHP là đối tượng hiện tại. Trong định nghĩa lớp, bạn sử dụng $this để làm việc với đối tượng hiện tại. Đi lớp này là một ví dụ:

class Hello { 
    public $data = 'hello'; 
    function hi() { 
    $this->data = 'hi'; 
    } 
} 

Bạn có thể nhanh chóng lớp này nhiều lần, nhưng $data sẽ chỉ được thay đổi để hi trong những đối tượng mà bạn gọi là chức năng:

$one = new Hello; 
$two = new Hello; 
$two->hi(); 

echo $one->data, "\n", $two->data; 
+2

Chắc chắn đây là một hướng dẫn tốt về ý nghĩa chung của '$ this' nhưng không giải quyết codeigniter cụ thể, đó là những gì câu hỏi là về. – jondavidjohn

6

$this không phải là một cái gì đó từ CodeIgniter, nhưng từ PHP. $this đề cập đến đối tượng hiện tại.

Bất cứ khi nào bạn tạo một thể hiện như thế này:

$something = new SomeClass(); 

Sau đó $this đề cập đến trường hợp đó được tạo ra từ SomeClass, trong trường hợp này $something. Bất cứ khi nào bạn đang ở trong chính lớp đó, bạn có thể sử dụng $this để tham chiếu đến trường hợp này. Vì vậy:

class SomeClass { 

    public $stuff = 'Some stuff'; 

    public function doStuff() 
    { 
    $this->stuff; 
    } 

} 
+0

Cảm ơn, về cơ bản nó tương tự như C++ theo ý nghĩa rằng this.stuff() – sqlmole

+0

Tôi không có kinh nghiệm với C++, nhưng có, nó có thể thực hiện 'this' theo cùng một cách. – Luwe

4

Xét về CodeIgniter:
Bạn sẽ nhận thấy rằng mỗi bộ điều khiển trong CodeIgniter mở rộng lớp điều khiển cơ bản. Sử dụng $this trong một bộ điều khiển cho phép bạn truy cập vào tất cả mọi thứ được xác định trong bộ điều khiển của bạn, cũng như những gì được kế thừa từ bộ điều khiển cơ sở.

Đa số ứng dụng bạn sẽ thoát khỏi $this liên quan đến việc gọi phương pháp mà các lớp cơ sở đã được nạp cho bạn - $this->load, $this->uri vv

Nếu tôi nhớ không lầm, mã PHP trong một cái nhìn được chạy trong bối cảnh của bộ điều khiển, vì vậy bạn sẽ có quyền truy cập vào đối tượng bộ điều khiển với $this từ đó.

+0

nếu chúng ta không viết '$ this' sẽ làm việc trong PHP ??? Là công việc của nó trong C + + ?? chúng ta có thể viết bất kỳ thành viên dữ liệu nào với 'this' hoặc không có' this' cũng như trong C++ chúng ta có thể làm trong PHP ???? –

+0

@BilalMaqsood - không, PHP không hỗ trợ cú pháp đó. –

17

Để thực sự trả lời câu hỏi của bạn, $this thực sự đại diện cho cá thể Codeigniter singleton (thực ra là đối tượng điều khiển).

Ví dụ khi bạn tải thư viện/mô hình, bạn đang gắn chúng vào trường hợp này để bạn có thể tham chiếu chúng dưới dạng thuộc tính của cá thể này.

Một cách khác để có được ví dụ này trong trình mã hóa là chức năng get_instance() mà bạn sử dụng khi xây dựng thư viện di động.

0

Đây là cách để tham chiếu một thể hiện của một lớp từ bên trong nó, giống như nhiều ngôn ngữ hướng đối tượng khác. Từ các tài liệu PHP: 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. ... $ này chủ yếu được sử dụng để chỉ các thuộc tính của một lớp học

+0

Điều này không thêm gì cho nhiều câu trả lời mà câu hỏi này đã nhận được 6 năm trước ... –

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