![]() |
![]() |
-gosss- |
![]()
Post
#1
|
Goście ![]() |
Ktoś mi wyjaśni dlaczego poniższy kod nie działa?
A jak napiszę
To jest już ok... Wyskakuje komuniakt Cytat Fatal error: Cannot use App\Model\Test as Test because the name is already in use in I rozumiem go, ale przecież odwołane jest zupełnie inne, tam jest do kontrolera a później do modelu... to jak w końcu korzystać z tych przestrzeni? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 378 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze oba use wstawiasz na początku. Po drugie jak widzisz masz 2x Test, musisz ustawić alias. Poczytaj w dokumentacji.
-------------------- |
|
|
-Gość- |
![]()
Post
#3
|
Goście ![]() |
Przestrzenie nazw w PHP w ogóle nie są przemyślane.
Przykłądowo
Art dziedziczy po Start, z tym że start szukany jest w katalogu gdzie jest Art. To jakaś parodia namespace... |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Pierwszy przykład nie działa Ci, ponieważ pod nazwą "Test" mogą kryć się dwie nazwy, którą z nich powinno się użyć? Niby można by powiedzieć, że tą, która została zadeklarowana jako ostatnia, ale taka niejednoznaczność byłaby bardzo irytująca i powodowałaby wiele błędów.
2. Co do drugiej kwestii z postu powyżej, to nie rozumiem Twojego zdziwienia. Przecież utworzyłeś klasę App\Core\Start oraz App\Cos\Art, która dziedziczy po Start (nieistniejąca klasa). Skąd PHP miałoby wiedzieć, że chodzi o Start z przestrzeni App\Core? |
|
|
-Gość- |
![]()
Post
#5
|
Goście ![]() |
Crozin, bo to jest logiczne? PHP powinno sprawdzać co z czego pochodzi. Kożystam z SPLloadera https://gist.github.com/221634
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Logicznym byłoby, że jeżeli nie istnieje dyrektywa use deklarująca jakąś tam klasę Start z innej przestrzeni nazw, to w przypadku wystąpienia nazwy Start zostanie założone, że odnosi się ona do aktualnej przestrzeni nazw, czyli pełna nazwa klasy to App\Cos\Start.
Dlaczego niby PHP miałby uznać, że może chodzić o App\Core\Start? PS. Ten autoloader jest źle napisany - metoda loadClass() musi zwracać wartość logiczną true/false, ta zawsze zwraca nulla. Ten post edytował Crozin 22.05.2012, 10:24:12 |
|
|
-Gość- |
![]()
Post
#7
|
Goście ![]() |
Znasz jakiś lepszy który działa na podobnej zasadzie i nie jest kobyłą?
Czyli że przed użyciem new Art, mam napisać use App\Core\Start ? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Znasz jakiś lepszy który działa na podobnej zasadzie i nie jest kobyłą? ClassLoader z Symfony2? http://symfony.com/doc/current/components/class_loader.htmlCytat Czyli że przed użyciem new Art, mam napisać use App\Core\Start ? Albo używasz use albo podajesz pełną nazwę klasy:
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 17:28 |