Использование composer php, чтобы избежать зависимости

Я застрял в реализации composer. Я не понимаю формирование автозагрузки. Я собираюсь набросать каталог файлов, а вы, люди, просто расскажите мне, как я сформировал назначение класса в автозагрузку:

|---------src/
|         |-----bitm/
|         |       |---person/
                         |person.php
|         |       |---Age/
                       |age.php
|         |-----vendor/
                  |----composer
                  |autoload.php
|         |

|         |composer.json

|         |  

|         |index.php

above structure is my folder structure in web server.

следующий код для composer.json

{
"autoload":{
    "psr-4":{
        "bitm\\person" : "src"
    }
}}

следующий код для index.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Greeting</title>
</head>
<body>
<?php
/*function __autoload($className){
    //var_dump($className);
   include_once($className.".php");
}*/
include_once("vendor/autoload.php");

use bitm\person\person;
use bitm\age\age;

$mamun=new person('Mamun');
$age=new age(24);

$mamun->greeting();
$age->personAge();


?>

</body>
</html>

Я использовал пространство имен для person.php — bitm\person, а пространство имен для age.php — bitm\age.

мой вопрос к вам, ребята, почему это показывает

Неустранимая ошибка: класс 'bitm\person\person' не найден в C:\xampp\htdocs\basis_mamun_ewu\Mamun\src\index.php в строке 18


person hmamun    schedule 12.12.2015    source источник


Ответы (1)


Если я правильно прочитал ваш ASCII-арт, у вас есть четыре ошибки:

  1. composer.json находится внутри каталога src. Это нормально, но любые пути, связанные с автозагрузкой, относятся к положению файла composer.json, а у вас в пути автозагрузки src - неправильно. Код, который вы хотите загрузить, находится в каталоге bitm.
  2. Префикс PSR-4 должен заканчиваться обратной косой чертой. Композитор, возможно, уже жаловался на это. Запустите composer validate, чтобы увидеть эту и, возможно, другие ошибки. Как вы уже сделали с внутренней обратной косой чертой, ее нужно экранировать в JSON, поэтому она должна читаться как "bitm\\person\\".
  3. Стандарт PSR-4 говорит вам, что часть префикса удаляется из имени класса, а остаток преобразуется в путь. Если у вас есть класс bitm\person\person и префикс bitm\person, то оставшаяся часть этого имени класса person будет преобразована в путь person.php и предполагается в каталоге, который вы указали в файле composer.json. Я уже упоминал, что src был неправильным, но в качестве примера: Composer пытался загрузить файл src/person.php (относительно позиции composer.json).
  4. Хотя классы PHP не чувствительны к регистру, PHP не будет преобразовывать регистры имен классов при автозагрузке, и имя класса будет преобразовано в имя файла. Но файловые системы чувствительны к регистру (если вы не используете Windows). У вас есть каталог Age, но вы используете пространство имен age. Это не будет соответствовать. Всегда используйте один и тот же случай везде.

Также обратите внимание, что вы сделали префикс для bitm\person, а не для bitm\age, поэтому вы не можете автоматически загружать возрастные классы. Вы можете иметь несколько префиксов в разделе автозагрузки или использовать более общий префикс bitm, который будет охватывать все классы.

person Sven    schedule 13.12.2015
comment
спасибо бро! Я немного запутался в композиторе. Ваша помощь очень ценна :) - person hmamun; 13.12.2015