![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
W momencie, gdy aplikacja staje się coraz większa, trzeba zastosować technikę wygodnego ładowania klas.
Przeczytałe na forum, że najlepszym rozwiązaniem jest użycie klasy SplClassLoader, zgodnej ze standardami PSR-0. Czy coś od tego czasu się zmieniło? Utworzyłem zatem w katalogu głównym na serwerze plik SplClassLoader.php, w którym wkleiłem kod pochodzący ze strony: https://gist.github.com/jwage/221634#file-s...loader-php-L142 Zawartość pliku index.php wygląda tak:
Utworzyłem w tym katalogu kolejny katalog o nazwie "classes", a w nim umieściłem plik klasa.php z prostą klasą. Mimo to pokazuje się błąd: Fatal error: Class 'classes\klasa' not found in D:\xampp\htdocs\nauka\index.php on line 8 Nie wiem, w czym tkwi problem, a podejrzewam, że to drobnostka. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Zainteresuj się tym:
https://getcomposer.org/doc/01-basic-usage.md#autoloading PS.W tamtym kodzie co masz separatorem jest _ a nie \ Ten post edytował Pyton_000 25.09.2014, 11:56:08 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Poprzednie rozwiązanie jest wg mnie prostsze, bo nie wymaga dodatkowego pliku composer.json, którego istoty kompletnie nie rozumiem - napotkałem go w kilku skryptach
W jaki sposób poprawić kod z pierwszego posta, aby zaczął działać? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Przecież Ci napisałem użyj _ w nazwie klasy
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Wg Twoich zaleceń zmieniłem kod na:
i nadal nie działa. Tutaj: http://forum.php.pl/index.php?showtopic=23...toload&st=0 w poście #8 używa się \, a nie _ |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Zrób sobie var_dump($fileName) w loadClass
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Twoje polecenie nie jest dość precyzyjne. W klasie SplClassLoader w metodzie loadClass zmienna $fileName występuje kilka razy.
Poza tym, skoro to taka popularna klasa, to chyba nie powinniśmy szukać w niej błędów, a raczej w kodzie, jaki przedstawiłem. Coś pokręciłem, ale nie wiem co. W temacie, o jakim pisałem wcześniej, innemu użytkownikowi klasa działała bez zarzutu. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
No to pokaz jeszcze jak wyglada plik classes/klasa.php
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
|
|
|
![]()
Post
#11
|
|
Grupa: Nieautoryzowani Postów: 50 Pomógł: 2 Dołączył: 28.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Ale tak "classes_klasa()" kazał mi tę klasę nazwać @Pyton. W oryginale jest inaczej, przeczytajcie pierwszy post, tam wszystko wyjaśniłem.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Poczytaj o przestrzeniach nazw w php bo moim zdaniem nie ma sensu żeby z nich korzystać a nie mieć o nich pojęcia.
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Mam rozwiązanie.
Index.php
classes/Klasa.php:
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 467 Pomógł: 77 Dołączył: 6.09.2008 Skąd: Miechów / Kraków Ostrzeżenie: (0%) ![]() ![]() |
Możesz również pominąć use i napisać tak:
Kod z pierwszego postu nie zadziałał ponieważ w pliku z klasą nie zadeklarowałeś przestrzeni nazw:
-------------------- Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.
https://www.aroch.pl https://themeforest.net/user/aroch https://www.astroblog.aroch.pl https://www.4geeks.pl |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 5.07.2025 - 06:44 |