2009-01-24 41 views
5

Tôi biết bạn có thể sử dụng get_class ($ this) bình thường nhưng tôi cần phải lấy tên của lớp trong một hàm tĩnh, nơi đối tượng chưa được khởi tạo.Có thể lấy tên của lớp hiện tại từ một đối tượng không được khôi phục trong PHP?

Xem đoạn mã sau:

class ExampleClass 
{ 
    static function getClassName() 
    { 
     echo get_class($this); // doesn't work unless the object is instantiated. 
    } 
} 

$test1 = new ExampleClass(); 
$test1->getClassName(); // works 

ExampleClass::getClassName(); // doesn't work 
+0

Bạn có thể muốn chỉnh sửa câu hỏi của mình để đọc rằng bạn hiểu rằng $ điều này không có ý nghĩa trong trường hợp tĩnh - tôi nghĩ một số người có thể nghĩ rằng bạn không hiểu '$ this' có nghĩa là gì. Xem câu trả lời của tôi về get_called_class. –

Trả lời

3

tôi đã tìm ra bạn có thể sử dụng __CLASS__ để có được tên lớp. Ví dụ:

class ExampleClass 
{ 
    static function getClassName() 
    { 
     echo __CLASS__; 
    } 
} 
+7

Lưu ý rằng __CLASS__ sẽ trả về lớp nơi hàm được xác định. Nếu bạn mở rộng nó, bạn sẽ không nhận được lớp con. – troelskn

+1

@troelskn: rất có thể cắn người hỏi trong ass. Bạn cũng nên gửi câu trả lời này để mọi người xem nó hơn. –

8

Tôi nghĩ bạn đang tìm hàm get_called_class(), nếu bạn muốn lấy tên lớp từ phương thức tĩnh.

Xem get_called_class documentation để biết thêm thông tin.

0

Câu hỏi của tôi là, làm thế nào bạn quản lý để gọi một hàm tĩnh mà không biết tên lớp ở nơi đầu tiên?

duy nhất hai cách tôi có thể nghĩ đến là:

ExampleClass::getClassName(); //Hard Coded - the class name is hard and visible 
$class = "ExampleClass"; 
$class::getClassName();  //Soft Coded - the class name is the value of $class 

Có lẽ một giải pháp tốt hơn có thể được cung cấp nếu chúng ta biết bối cảnh mà bạn đang cố gắng để thực hiện cuộc gọi?

+0

Tôi đang gọi một lớp kế thừa và có câu lệnh switch() trong lớp cha yêu cầu tên lớp để quyết định phải làm gì –

+0

Dữ liệu biến mà bạn đang cố chuyển đổi sẽ yêu cầu chức năng tĩnh là gì? –

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