2013-03-15 11 views
5

Zacząłem budować moją bibliotekę kodów od PHP 4. Użyłem klasy require_once do importowania klas. Teraz w PHP 5.3 spotkałem się z definiowaniem przestrzeni nazw i ich importowania.Importowanie przestrzeni nazw w porównaniu z plikami w PHP

Chciałbym zmienić moje pliki źródłowe, aby używać importowania (instrukcja use) zamiast używać require_once. Czy jest to właściwa decyzja, nie jestem pewien.

Chyba byłoby łatwo. Definiowanie przestrzeni nazw na początku plików klas i wyszukiwanie w innych plikach, które ich używają (zastąpienie require_once przez use). Na treningu, co może pójść nie tak?

Czy nastąpi poprawa wydajności? Włączenie pliku jest oczywiste, jak PHP znajduje plik. Ale w przypadku importowania przestrzeni nazw nie jest to takie oczywiste. Czy występuje utrata wydajności podczas wyszukiwania przestrzeni nazw i indeksowania ich przez PHP?

Odpowiedz

16

use i require_once to zupełnie inne rzeczy. use nie importuje żadnego pliku. use ułatwia Ci życie. Zamiast pisać Full\Path\To\Class za każdym razem można zrobić

use Full\Path\To\Class 

$bar = new Class(); 

Twoje są nadal odpowiedzialne zawierać odpowiednie pliki.

Zamiast ładować wszystkie pliki ręcznie, można polegać na PHP auto class loading.

Możesz użyć Composer lub frameworków takich jak Symfony 2 lub Zend2, które obsługują wszystkie automatyczne ładowanie.

Migracja istniejącego kodu do użycia automatycznego ładowania i instrukcji use zamiast include_once może być bardzo czasochłonna. Najprawdopodobniej nie ma rozwiązania do wyszukiwania i zamiany.

+0

dziękuję, nie zauważyłem automatycznego ładowania klasy. Jednak brzmi to jak zła praktyka, którą można wdrożyć tylko w języku tłumacza. Dodaje obciążenie jak przeszukiwanie całej ścieżki dla klasy i prowadzi do złej dokumentacji, że nie wiesz, który plik używa czego. – bkilinc

+0

Nigdy nie widziałem żadnych problemów z wydajnością, ponieważ ładowanie klasy auto auf. Jeśli korzystasz z wymienionych narzędzi, możesz zobaczyć, że robią dużo, aby upewnić się, że wyszukiwanie jest szybkie. Po tym wszystkim Java robi to z powodzeniem od ponad dekady. I wreszcie: poleganie na prostych regułach włączania/ładowania klas znacznie upraszcza twój kod. – BetaRide

+0

@bililinc: Standardy takie jak PSR-0 umożliwiają stosowanie spójnych reguł do automatycznego ładowania w aplikacji. Jeśli cała biblioteka stosuje ten sam standard, możesz użyć pojedynczego autoloadera do swojej całej aplikacji. Pozwala to na napisanie bardzo modularnego kodu OOP bez obawy o zależności, przy jednoczesnym zmniejszeniu obciążenia wydajności do absolutnego minimum. –

Powiązane problemy