2012-10-03 31 views
5

thể trùng lặp:
Get class name from extended classBắt tên lớp của lớp Đầu tư xây dựng

Giả sử tôi có như sau:

class Foo 
{ 
    public $name; 

    public __construct() 
    { 
    $this->name = __CLASS__; 
    } 
} 

class Bar extends Foo 
{ 
} 

class FooBar extends Foo 
{ 
} 

$bar = new Bar(); 
echo $bar->name; // will output 'Foo', but I want 'Bar' 

$foobar = new FooBar(); 
echo $foobar->name; // will output 'Foo', but I want 'FooBar' 

Có cách nào để có được tên của lớp xây dựng, không đặt tên trong một lớp mở rộng, ví dụ đặt tên trong lớp Foo?

Lưu ý: Tôi có rất nhiều phân loại xuất phát từ Foo, việc đặt tên trong mọi lớp dẫn xuất sẽ là rất nhiều mã hóa.

+0

gì về 'get_class() 'và tất cả các fctns có liên quan khác? – Havelock

Trả lời

0

Có một xây dựng trong chức năng php để có được tên lớp get_class()

$fooBar = new FooBar(); 
echo get_class($fooBar); //will output FooBar 
3

này là rất dễ dàng: chỉ cần sử dụng get_called_class:

$this->name = get_called_class(); 

Đây là một phần trong những tính năng liên kết tĩnh muộn giới thiệu trong PHP 5.3. Nó đề cập đến lớp được gọi, chứ không phải là lớp mà phương thức được định nghĩa.

+2

Có lẽ không cần cho điều đó (và cho một phụ thuộc vào> = 5.3 hoặc), vì '__construct' không thực sự là một phương thức tĩnh (nó có quyền truy cập vào' $ this') – lanzz

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