-2

Я очень запутанным о пространстве имен в PHP (> 5.4. *) И композитор(решаемые) Класс не найден с помощью пространства имен compilant PSR-4 на PHP

Сценарий

|vendor 
    |autoload.php 
    |abkrim 
     |cputils 
      |src 
      |CpPanelBackTest.php 

Код CpPanelBackTest.php

namespace Abkrim\Cputils; 
class CpPanelBackTest 
{ 
    public static function getDate(){ 
     $year = date('Y'); 
     $month = date('m'); 
     $day = date('d'); 
     return $day . '/' . $month . '/' . $year; 
    } 
} 

test.php Файл

require __DIR__.'/../../vendor/autoload.php'; 
use Abkrim\Cputils\CpPanelBackTest; 
echo 'Date today is: ' . CpPanelBackTest::getDate(); 

Solution -> test.php Файл composer.json

require 'vendor/autoload.php'; 
use Abkrim\Cputils\CpPanelBackTest 
echo 'Date today is: ' . CpPanelBackTest::getDate(); 

файла поставщика/abkrim/cputils

"autoload": { 
    "psr-4": { 
     "Abkrim\\Cputils\\": "src/" 
    } 
} 

Добавить в composer.json глобального приложения

"repositories": [ 
    { 
    "type": "package", 
    "package": { 
     "name": "abkrim/cputils", 
     "version": "master", 
     "source": { 
     "url": "ssh://[email protected]_git:port/path/git/cputils", 
     "type": "git", 
     "reference": "master" 
     } 
    } 
    } 
], 
    "autoload": { 
    "psr-4": { 
    "Abkrim\\Cputils\\": "vendor/abkrim/cputils/src/" 
    } 

Конечно, после этого изменения мне нужно запустить

composer dump-autoload -o 
composer update 

Get ошибка ->

PHP Fatal error: Class 'CpPanelBackTest' not found in at file xxxx line xxxx 

Если код изменения для CpPanelBackTest.php

//namespace Abkrim\Cputils; //coment namespace 
class CpPanelBackTest 
{ 
    public static function getDate(){ 
     $year = date('Y'); 
     $month = date('m'); 
     $day = date('d'); 
     return $day . '/' . $month . '/' . $year; 
    } 
} 

И файл test.php

//require __DIR__.'/../../vendor/autoload.php'; 
//use Abkrim\Cputils\CpPanelBackTest; 
require_once __DIR__ . '/../../vendor/abkrim/cputils/src/CpPanelBackTest.php'; 

Теперь работать нормально.

Я потерян. Я не понимая ничего об этом

echo 'Date today is: ' . CpPanelBackTest::getDate(); 

ответ

0

Ошибка вы испытываете срабатывает, когда PHP не может загрузить или найти класс. Имя в этом сообщении об ошибке - это полное имя исследуемого класса.

Это имя в вашем сообщении об ошибке не содержит пространства имен. Это означает, что ваше использование не было обнаружено как использование пространства имен. Это верно, если вы посмотрите на одну строку: echo 'Date today is: ' . CpPanelBackTest::getDate(); Здесь нет пространства имен.

Перед этим у вас есть инструкция use, и предполагается, что класс будет импортироваться в текущее (глобальное) пространство имен. И я считаю, что это будет так - мои тесты показывают, что код, отправленный в ваш вопрос, вероятно, будет правильно работать. Проблема в том, что мне сложно создать целый тестовый пример с Composer, отдельным пакетом, включая его и т. Д., Поэтому я выполнил только крошечный тестовый тест, который НЕ учитывает различия файловой системы.

<?php 

namespace Foo { 
class Bar {} 
} 

namespace { 
use Foo\Bar; 
var_dump(new Bar); 
} 

в действии: http://3v4l.org/mrVsI

И это мое предположение: PHP классы не чувствительны к регистру, но преобразование от имени класса в путь и имя файла чувствительно к регистру на некоторых файловых системах. Если вы ошибочно указали только одну букву в коде, Composer не сможет обнаружить префикс и/или не сможет найти нужный файл.

К сожалению, вы не сделали правильный тест, чтобы доказать, что автозагрузка неверна. Вы должны удалить только автозагрузчик и вместо этого потребовать файл, содержащий класс, без отключения пространства имен.

+0

более простой .. add require 'vendor/autoload.php'; на test.php и отлично работать. – abkrim

+0

вопрос сложнее. Я аск для сценария, используя композитор + php5 + psr-4. Когда вы запускаете композитор, если пакет composer.json и ваш комплект composer.json в порядке, он должен записывать на вендор/композитор/autoload_psr4.php строку для правильного использования вами пространства имен psr-4, составленного из вашего пакета. – abkrim

 Смежные вопросы

  • Нет связанных вопросов^_^