Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pierwszy krok w tematykę Namespaces i PSR-0
Forum PHP.pl > Forum > PHP > Object-oriented programming
gachowy
Powitać.

Po dłuższym czasie obchodzenia dookoła tematyki namespaces i standardu PSR-0, w końcu coś mnie skłoniło do zapoznania się z ową 'czarną magią'. Już przy pierwszym kroku, zacząłem mieć małe problemy. A mianowicie: wystartowałem od korzystania z loadera serwowanego wraz z composerem...

Przykładowa struktura plików:
  1. app
  2. --Core
  3. ----Module
  4. ------Test.php
  5. public
  6. --index.php
  7. vendor
  8. --autoload.php
  9. --composer (wraz z zawartością)
  10. composer.json
  11. composer.phar


composer.json:
  1. {
  2. "autoload": {
  3. "psr-0": {
  4. "Core": "app/Core/"
  5. }
  6. }
  7. }


index.php
  1. <?php
  2. require_once '../vendor/autoload.php';
  3. use Core\Module\Test;
  4. $obj = new Test;
  5. $obj->foo();


Test.php
  1. <?php
  2. namespace Core\Module\Test;
  3.  
  4. class Test {
  5. public function foo() {
  6. echo 'bar';
  7. }
  8. }


Mimo wszycho, owy kod wywala soczysty 'Class Core\Module\Test not found ... index.php on line 4'. Jak to ugryźć, żeby rozgryźć? Nie pogardził bym wytłumaczeniem, gdzie użyłem nie takiego namespace, a gdzie w moim kodzie wylądowało UFO biggrin.gif

Pozdrawiam
Szymciosek
Spróbuj zrobić tak:

  1. <?php
  2. namespace Core\Module;
  3.  
  4. class Test {
  5. public function foo() {
  6. echo 'bar';
  7. }
  8. }


Klasy test nie umieściłeś w folderze Test.
gachowy
Ok. Teraz już załapałem. Byłem przekonany że namespace w klasie = namespace którego używam, a tu widać że mała różnica jednak jest smile.gif

Dzięki, i temat do zamknięcia smile.gif
Szymciosek
namespace wskazuje przestrzeń, w której dane skrypty się znajdują (czyli po prostu katalogi mogą to być)

przy use podajesz namespace, do którego chcesz się odnieść + "\NazwaKlasy"
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.