2011-07-08 25 views
5

Sự khác nhau giữa việc truy cập phương thức lớp thông qua -> và thông qua :: là gì?Sự khác biệt giữa việc truy cập một phương thức lớp thông qua -> và thông qua :: là gì?

+1

có thể trùng lặp [Tham khảo - Biểu tượng này có ý nghĩa gì trong PHP?] (http://stackoverflow.com/questions/ 3737139/reference-what-does-this-symbol-mean-in-php) –

+0

điều này rõ ràng là một dup. Doens't xứng đáng +1 – dynamic

Trả lời

6

-> là để truy cập các thuộc tính và phương thức của đối tượng được tạo ra. Các :: là để truy cập các phương pháp tĩnh, hằng số hoặc phương pháp ghi đè.

Để biết thêm thông tin:

4

:: được sử dụng để truy cập vào các phương pháp tĩnh hoặc các thuộc tính, vì vậy bạn không cần phải tạo một đối tượng của lớp chứa.

-> được sử dụng để truy cập các phương pháp hoặc thuộc tính của đối tượng được tạo ngay.

2

Sử dụng -> có nghĩa là các phương pháp truy cập của bạn dựa trên một cá thể (nó giữ trạng thái của đối tượng, chẳng hạn như các biến riêng tư/công khai).

:: là một phương pháp tĩnh, có nghĩa là nó không có baring nếu đối tượng đã hoặc chưa được khởi tạo, nhưng những phương pháp này liên quan đến đối tượng này.


Hình như sau:

class Mustang 
{ 
    var $gallons = 12; // gallons 

    public function getFuel() 
    { 
    return $this->gallons; 
    } 

    public static function getEngine() 
    { 
    return "V8"; 
    } 
} 

$mustang = new Mustang(); // creating an instance 

echo $mustang->getFuel(); // retrieve the fuel (instance, _this_ mustang) 

echo Mustang::getEngine(); // echo a stat about Mustangs in general (static) 

Nếu bạn có một thể hiện của một "Mustang", mỗi trường hợp có thể (giả định) có một số lượng cụ thể của nhiên liệu để nó (điều này được ví dụ dựa, và có thể truy cập được bằng cách sử dụng ->).

Nếu bạn muốn một cái gì đó vẫn liên quan đến mustang, nhưng không có baring trên trường hợp cụ thể chính nó, bạn sẽ tham khảo một phương pháp tĩnh (trong trường hợp này tất cả mustang có một V8 trong trường hợp này, biểu tượng của ::).

1

Điều Francois nói là chính xác. Nhà điều hành :: được gọi là Scope Resolution Operator .... và (tin hay không) được gọi là paamayim-nekudotayim. Nó được sử dụng khi truy cập các thành viên tĩnh, không đổi và bị ghi đè của một lớp . Tôi nhấn mạnh lớp vì nó không được sử dụng trên các đối tượng cụ thể . Bạn có thể nghĩ toán tử phân giải phạm vi là meta cho chính lớp đó; nó hoạt động trên chính nó và cha mẹ của nó. (Hãy suy nghĩ về nó, hằng lớp không thuộc về bất kỳ đối tượng cụ thể, do đó bạn sẽ không sử dụng ->

đó mang lại cho chúng ta những gì là ->? Nó được sử dụng để vận hành của đối tượng và không lớp. Khi bạn tạo một đối tượng cụ thể, bạn có thể truy cập thuộc tính và phương thức của nó bằng cách sử dụng toán tử này. Ví dụ:

$john = new User(); //create the object 
$john->age = 10; //accessing an object property 
$age = $john->getAge(); //accessing an object method 
Các vấn đề liên quan