2011-06-24 18 views
11

Zrobiłem małe sieci przy użyciu przestrzeni nazw. Mam go na moim komputerze i zamierzam przenieść go do darmowego hostingu używającego php 5.2. Podświetlacz składni dla php 5.2 interpretuje je jako błędy.Przestrzenie nazw w php 5.2

Czy przestrzenie nazw są obsługiwane przez PHP 5.2?

Jeśli nie, to w jaki sposób można z nich korzystać przy niewielkich zmianach w istniejącym kodzie?

+0

Nie. Przeczytaj tę uroczą instrukcję: http://php.net/manual/en/language.namespaces.php –

+0

Chociaż nie jest obsługiwana, możesz ją oczywiście usunąć. Tak się składa, że ​​pojawiła się niedawno: http://stackoverflow.com/questions/1836387/strategy-for-developing-namespaced-and-non-namespaced-versions-of-same-php-code/3661724#3661724 - Nie jestem pewien, czy o to prosiłeś, czy tak naprawdę było o podświetlaniu składni? – mario

+1

Preprocesy PHP sor brzmi dobrze. Ale używam również nazw zmiennych, które nie są przetwarzane z tym skryptem. – kravemir

Odpowiedz

26

Przestrzenie nazw nie są obsługiwane przed wersją 5.3. Naprawdę nie ma sposobu, aby zaadaptować się do nich w 5.2.

7

Przestrzenie nazw są dostępne dopiero od 5,3

Przynajmniej w przypadku klas, można użyć funkcji class_exists aby sprawdzić, czy klasa została już zdefiniowana z niczym nazwa w globalnej przestrzeni nazw. W połączeniu z funkcją __autoload() można utworzyć jeden uniwersalny alias i sprawdzić system dla obu klas, których nazwy zostały nazwane oryginalną nazwą, a także z nazwą z dodanym dodatkowym identyfikatorem. Użyję "ns" jako przykładu.

function __autoload($class){ 
    try{ 
    require_once('ns'.$class.'.php'); 
    }catch(Exception $e){ 
    echo 'The class is unavailable in pseudo-namespace as well as global'; 
    } 
} 

Po prostu upewnij się, że wymagane są punkty ścieżki do miejsca, w którym przechowujesz swoje modele. Można również użyć innego folderu zamiast aliasu.

W ten sposób wszystkie zduplikowane klasy mogą być umieszczane w plikach oddzielnych od głównego wykonania, które są uwzględniane tylko wtedy, gdy nie istnieją w globalnym. Chociaż nie rozwiązuje to problemu z koniecznością fizycznej zmiany nazw klas, to pozwoli ci umieścić swoje definicje w różnych katalogach dla celów związanych z wersjami itp.

0

Po prostu napotykam ten problem, opracowałem skrypt do przesyłania zdjęć siebie i dodałem kod strony trzeciej, aby pomóc w przetwarzaniu obrazu (kadrowanie), ale używają przestrzeni nazw, działa dobrze na moim rozwijającym się komputerze, ale kiedy załadowałem na serwer na żywo, dostaję błąd Parse.

szczęście mój gospodarz obsługuje PHP 5.3 i 5.4, więc Ive poprosił ich, aby zmienić go na 5,3 dla mnie, im nadzieję, że rozwiąże problemy im o, po prostu usuwając obszary nazw wykonany skrypt nie :(

Paul

Powiązane problemy