2010-11-11 38 views
21

Tôi đã tìm kiếm các trang web để thử và xử lý việc sử dụng các không gian tên PHP, nhưng tất cả đều có vẻ khá mơ hồ nhưng những gì họ đang cố gắng làm là dễ hiểu!Sử dụng các không gian tên PHP

Câu hỏi của tôi là: Tôi có một tệp có tên là people.php và trong đó được xác định là lớp được gọi là people. Nếu tôi tạo một tệp khác có tên là managers.php trong cùng một thư mục, tôi có thể xác định một lớp được gọi là people mở rộng lớp people gốc nhưng trong không gian tên managers, nếu vậy tôi phải 'bao gồm' people.php gốc và nếu có thì bao gồm sau khi viết: namespace managers?

+3

Một điều cần lưu ý rằng không gian tên trong PHP không phản ánh cấu trúc thư mục của bạn. Bạn phải tự ánh xạ cấu trúc thư mục của bạn với các tên không gian tên của bạn. – Extrakun

+0

[This] (http://www.sitepoint.com/php-53-namespaces-basics/) sẽ là một nguồn tài nguyên tuyệt vời để xóa mọi thứ bạn cần biết về các không gian tên PHP. –

Trả lời

4
// people.php 
<?php 
namespace People; 

class People {} 


// managers.php 
<?php 
namespace Managers; 

require_once __DIR__.'/people.php'; 

class People extends \People\People {} 
31

Không gian tên là cách nhóm các lớp liên quan của bạn thành các gói. Những gì bạn mô tả tốt nhất có thể được đặt dưới một không gian tên duy nhất như

<?php // people.php 
namespace com\example\johnslibrary\people; 
abstract class People { 

} 

và sau đó

<?php // manager.php 
namespace com\example\johnslibrary\people; 
require_once 'path/to/People.php'; // can better use autoloading though 
class Manager extends People { 

} 

vì một Manager là một lớp con của nhân dân, vì vậy không có nhiều lý do để đặt chúng vào họ không gian tên riêng. Họ là những người chuyên biệt.

Nếu bạn muốn Người quản lý ở trong không gian tên riêng của họ, bạn có thể làm như vậy, nhưng phải sử dụng tên đủ điều kiện khi sử dụng từ khóa extends, ví dụ:

<?php // manager.php 
namespace com\example\johnslibrary\managers; 
require_once 'path/to/People.php'; 
class Manager extends \com\example\johnslibrary\people\People { 

} 

hoặc nhập khẩu các lớp dân đầu tiên

<?php // manager.php 
namespace com\example\johnslibrary\managers; 
use com\example\johnslibrary\People as People; 
require_once 'path/to/People.php'; 
class Manager extends People { 

} 

See the PHP Manual on Namespaces for extensive documentation.

0

Tôi có tuổi PHP Class và tôi cần phải sử dụng nó trong file PHP mới như ví dụ: index.php phải sử dụng iClass.php. Nhưng trước khi sử dụng iClass.php OLD i phải sửa đổi nó như dưới đây, để tôi có thể sử dụng nó trong index.php.

iClass.php:

namespace ic; 
class iClass { 
    public static function callMeFromClass() { 
    echo 'OK - you have called me!'; 
    exit; 
    } 
} 

index.php

namespace inex; 
require_once 'iClass.php'; 
use ic\iClass; 
iClass::callMeFromClass(); 
Các vấn đề liên quan