Как правильно задавать пространства имен?

Простой вопрос, но что то я не понимаю (

читаю PSR-0
Полностью определённое пространство имён и имя класса должны иметь следующую структуру: \\(\)*.

Примеры
\Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php

и далее идут другие требования...

У меня есть проект test.local
папка test.local содержит:
файл index.php
папку classes
папка classes содержит файл myclass.php с одноименным классом.

Как корректно задать пространства имен в php файлах и подключить myclass.php (вызвать там экземпляр класса) в файле index.php?

index.php
namespace Junior;
use \Junior\classes\myclass as myclass;
$myclass = new myclass();
$myclass->Hello();


classes\myclass.php
namespace \Junior\classes\;
class myclass 
{
function Hello()
{
echo 'Hello';	
}
}

Fatal error: Uncaught Error: Class 'Junior\classes\myclass' not found in C:\DATA\OpenServer\domains\test.local\index.php:4

PS
\Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
Не понятно что это и зачем надо.
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
delphinpro
@delphinpro
frontend developer
PSR-0 не рекомендую. Используйте PSR-4
https://qna.habr.com/q/272575#answer_715210

--------------------------------------
Поясняю по вашему случаю:

Структура файлов:
/classes/
  myclass.php
index.php
composer.phar
composer.json


Содержимое файлов:

composer.json:
{
  "require": {
    "php": "^7.4"
  },
  "autoload": {
    "psr-4": {
      "Junior\\classes\\": "classes"
    }
  }
}


index.php:
include __DIR__.'/vendor/autoload.php'; // Вот он – автозагрузчик, сгенерированный композером
use Junior\classes\myclass;
$myclass = new myclass();
$myclass->Hello();


myclass.php:
namespace Junior\classes;

class myclass {
  function Hello() {
    echo 'Hello';	
  }
}


Скачать composer.phar (Хотя в опенсервере, кажется встроенный есть)
Для генерации автозагрузчика открываем консоль опенсервера и выполняем команды

cd C:/DATA/OpenServer/domains/test.local
php composer.phar du
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы