2013-08-14 13 views
28

pojawia się błąd składniowy podczas próby korzystania z przestrzeni nazw wewnątrz własnej funkcjiużycie php namespace wewnątrz funkcji

require('/var/load.php'); 

function go(){ 

    use test\Class; 

    $go = 'ok'; 
    return $go; 
} 

    echo go(); 
+1

PHP Parse: błąd składni, nieoczekiwany T_USE w /var/www/test.php na linii 8 – westnblue

+2

Dlaczego chcesz to zrobić na początek? 'use' po prostu określa nazwę aliasu całego pliku, nic więcej, nic mniej. Jaki jest sens robienia tego w funkcji? – deceze

Odpowiedz

50

Od Scoping rules for importing

The use keyword must be declared in the outermost scope of a file (the global scope) or inside namespace declarations. This is because the importing is done at compile time and not runtime, so it cannot be block scoped

Więc powinieneś tak postąpić, użycie powinno być określone na poziomie globalnym

require('/var/load.php'); 
use test\Class; 

function go(){ 
    $go = 'ok'; 
    return $go; 
} 
echo go(); 

zobacz przykład 5 w poniższej instrukcji Proszę odnieść się do jego instrukcji w http://php.net/manual/en/language.namespaces.importing.php

błąd
+0

Przestrzenie nazw nie mają nic wspólnego z * zasięgiem *, więc uniknęłbym dwuznacznego użycia tego terminu tutaj ... – deceze

+0

ah tak. thankyou – westnblue

+0

@deceze proszę podać link do jasnego zrozumienia przestrzeni nazw i zakresu w php – Nishant

4

Od the manual:

The use keyword must be declared in the outermost scope of a file (the global scope) or inside namespace declarations.

+0

Spojrzałem na to ... po prostu trudno to zrozumieć – westnblue

+1

@westnblue Oznacza to, że instrukcja "use" może wystąpić tylko w części kodu uruchamianej zaraz po otwarciu pliku. Jeśli umieścisz go wewnątrz klasy lub funkcji, wykona się, gdy klasa lub funkcja zostanie wywołana. Jest to niezgodne z systemem PHP dla przestrzeni nazw i parsowania twojego kodu, więc musisz umieścić instrukcję "use" w najbardziej zewnętrznym zakresie pliku. – lonesomeday

+0

uratuj mi ból głowy w wykryciu problemu z moją przestrzenią nazw, którą umieściłem "używaj" w funkcji. dzięki –