2010-11-11 21 views
21

Szukałem stron internetowych, aby spróbować uzyskać dostęp do przestrzeni nazw PHP, ale wszystkie wydają się dość niejasne, ale to, co próbują zrobić, jest łatwe do zrozumienia!Używanie nazw PHP

Moje pytanie brzmi: Mam plik o nazwie people.php, w którym zdefiniowano klasę o nazwie people. Jeśli utworzę inny plik o nazwie managers.php w tym samym folderze, czy mogę ponownie zdefiniować klasę o nazwie people, która rozszerza oryginalną klasę people, ale w przestrzeni nazw managers, jeśli tak, to muszę "dołączyć" oryginalną wersję people.php, a jeśli tak, to wstawię po napisaniu: namespace managers?

+3

Jedno aby wziąć pod uwagę, że przestrzenie nazw w PHP nie odzwierciedla strukturę katalogów. Musisz ręcznie zmapować strukturę katalogów za pomocą nazw przestrzeni nazw. – Extrakun

+0

[To] (http://www.sitepoint.com/php-53-namespaces-basics/) byłoby doskonałym źródłem do wyczyszczenia wszystkiego, co musisz wiedzieć o obszarach nazw PHP. –

Odpowiedz

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

class People {} 


// managers.php 
<?php 
namespace Managers; 

require_once __DIR__.'/people.php'; 

class People extends \People\People {} 
31

Przestrzenie nazw umożliwiają grupowanie powiązanych zajęć w pakiety. Co można opisać można najlepiej umieścić pod jednym nazw jak

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

} 

a następnie

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

} 

ponieważ Menedżer jest podklasą ludzie, więc nie ma dużo powodów, aby umieścić je w ich własny obszar nazw. Są wyspecjalizowanymi ludźmi.

Jeśli chcesz, aby Menedżerowie znajdowali się we własnej przestrzeni nazw, możesz to zrobić, ale musisz użyć w pełni kwalifikowanej nazwy, gdy używasz słowa kluczowego extends, np.

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

} 

lub importować pierwszy

<?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

Mam starej klasy PHP i trzeba użyć go w nowym pliku PHP, jak na przykład klasę osoby: index.php musi użyć iClass.php. Ale przed użyciem OLD iClass.php muszę go zmodyfikować jak poniżej, tak, żebym mógł go użyć w 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();