W głównym katalogu projektu posiadam klasę src/File.php, która obsługuje pliki. Niestety w tym pliku zdefiniowałem także klasę wyjątku, którą chcę teraz przenieść do osobnego pliku, dodatkowo umieszczając go w podkatalogu Exception/. Pierwotny wygląd pliku src/File.php jest następujący:
<?php
namespace Nazwisko;
class File
{
...
}
class FileException extends \Exception
{
}
Po rozbiciu na dwa osobne pliki i umieszczeniu ich w tym samym katalogu src/ wszystko jest w porządku. Plik src/File.php ma postać:
<?php
namespace Nazwisko;
use Nazwisko\FileException;
class File
{
...
}
zaś src/FileException.php:
<?php
namespace Nazwisko;
class FileException extends \Exception
{
}
i podkreślam raz jeszcze, że ten kod działa poprawnie. Gdy jednak przeniosę plik src/FileException.php do lokalizacji src/Exception/FileException.php i zmodyfikuję oba pliki w następujący sposób:
<?php
namespace Nazwisko;
use Nazwisko\Exception\FileException;
class File
{
...
}
<?php
namespace Nazwisko;
//namespace Nazwisko\Exception; // również nie działa
class FileException extends \Exception
{
}
to kod nie działa, wypisując komunikat, że klasa nie została znaleziona. W pliku composer.json mam następujące powiązanie:
"autoload": {
"psr-4": {
"Nazwisko\\": "src/"
}
}