2010-08-10 33 views
20

Tôi đang cố gắng sử dụng không gian tên. Tôi muốn mở rộng một lớp bên trong một không gian tên khác. Tên của lớp là như nhau. Ví dụ:Mở rộng một lớp học với một không gian tên khác với cùng một ClassName

phụ huynh:

namespace Base; 

class Section extends Skeleton { 

protected $id; 

protected $title; 

protected $stylesheet; 
} 

Child:

namespace Base2; 
use \Base\Section; 

class Section 
    extends \Base\Section { 

} 

Nó là một ứng dụng mà sử dụng Học thuyết 2 và Zend Framework. Lớp Skeleton được sử dụng bởi Base/Section chỉ là một lớp trừu tượng chứa các phương thức ma thuật (__get, _set, v.v.).

Khi tôi cố gắng thuyết minh một lớp Mục \ Base2 \ nó ném một lỗi:

Fatal error: Cannot declare class Base2\Section because the name is 
already in use in /var/www/test/application/Models/Base2/Section.php 
on line 7 

Bất kỳ ý tưởng không?

+0

Bạn có hơi bối rối khi có sơ đồ đặt tên như vậy không? –

+0

Có, nhưng nó không phải là sơ đồ đặt tên thật. Chỉ phần Phần là có thật. Các không gian tên chỉ là ngẫu nhiên. –

+1

@Rene: Bạn có chắc chắn rằng chúng không thay vì _arbitrary_? –

Trả lời

40

Chỉ cần sử dụng tên đầy đủ

namespace Base2; 

class Section 
    extends \Base\Section { 
} 

Hoặc aliasing

namespace Base2; 
use \Base\Section as BSection; 

class Section 
    extends BSection { 
} 
+0

Thnx, điều này phù hợp với tôi! –

9

khi bạn nói

use \Base\Section 

bạn đang kéo lớp Mục vào phạm vi hiện tại của bạn, gây ra một cuộc xung đột khi bạn muốn tạo một lớp mới gọi là Section. chỉ cần bỏ qua câu lệnh sử dụng.

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