'Fatal error: Class'...'not found'에 빠졌을 때의 검사 5가지
11276 단어 PHP
vendor/autoload.require php 중입니까?
composer install
에 필요한 프로그램 라이브러리를 설치하고 사용하려면 Fatal이 됩니다.예: 설치guzzlehttp/guzzle
composer require guzzlehttp/guzzle
main.php로 GuzzleHttp\Client
코드 쓰기main.php
<?php
$client = new GuzzleHttp\Client();
그것을 실행해 보면'Unceaught Error:Class'Guzle Http\Client'not found'라고 불린다.실행 결과
❯ php main.php
PHP Fatal error: Uncaught Error: Class 'GuzzleHttp\Client' not found in /Users/suin/Desktop/myapp/main.php:2
Stack trace:
#0 {main}
thrown in /Users/suin/Desktop/myapp/main.php on line 2
Fatal error: Uncaught Error: Class 'GuzzleHttp\Client' not found in /Users/suin/Desktop/myapp/main.php:2
Stack trace:
#0 {main}
thrown in /Users/suin/Desktop/myapp/main.php on line 2
대응법:vender/autoad.require php이런 상황에서 단순한vendor/autoad.php를 읽는 것을 잊어버려서 읽어야 합니다.
main.php
<?php
require 'vendor/autoload.php'; // この行を追加
$client = new GuzzleHttp\Client();
composer.json에 대한 autoload 정의를 잊지 않았습니까?
일부 항목
new
은 디렉토리에 항목 범주를 저장하고 패키지를 사용합니다.이런 포장 이름을 해결하려면composier가 필요합니다.json에 autoad 디렉터리를 설명해야 합니다.예를 들어 다음과 같은 autoload 지시가 없는 상태에서
composer.json
{
"name": "suin/myapp",
"require": {
"guzzlehttp/guzzle": "^6.3"
}
}
다음 항목의 독립 클래스src/Application.php
<?php
namespace MyApp;
class Application
{
}
main.php 등 클라이언트 코드를 사용해도main.php
<?php
require 'vendor/autoload.php';
$app = new MyApp\Application();
Compooser의 클래스 로더에서 클래스를 찾을 수 없으며 Fatal 오류가 발생합니다.실행 결과
❯ php main.php
PHP Fatal error: Uncaught Error: Class 'MyApp\Application' not found in /Users/suin/Desktop/myapp/main.php:3
Stack trace:
#0 {main}
thrown in /Users/suin/Desktop/myapp/main.php on line 3
Fatal error: Uncaught Error: Class 'MyApp\Application' not found in /Users/suin/Desktop/myapp/main.php:3
Stack trace:
#0 {main}
thrown in /Users/suin/Desktop/myapp/main.php on line 3
대응법.json에 autoad 디렉터리 추가composer.json에 autoolad 지시가 추가되었는지 확인하십시오.
composer.json
{
"name": "suin/myapp",
"require": {
"guzzlehttp/guzzle": "^6.3"
},
// ここ↓
"autoload": {
"psr-4": {
"MyApp\\": "src/"
}
}
}
그리고 그것을 추가하면 실행src
,autoload.php 관련 파일을 다시 생성하십시오.❯ composer dumpautoload
Generating autoload files
vendor/composer/autoload_*.php의 내용이 최신인가요?
팀에서 개발한vendor 디렉터리가gitignore 등 버전 관리 외에 있으면 클래스 마운트 맵에서 최신 버전을 잃어버릴 수 있습니다.vendor의 내용을 관리하는 버전이라면 이 검사를 건너뛸 수 있습니다.
대응 방법:composier dupautoload로 클래스 마운트의 지도를 최신으로 설정
composer dumpautoload
vendor/composier/autoad*.php의 내용을 최신으로 바꾸세요.❯ composer dumpautoload
Generating autoload files
겸사겸사 말씀드리지만,composier.json의 autoload 디렉터리를 통해 psr-0, psr-4 등 불러오는 방법을 설정할 수 있습니다. 여기에 설정된 내용은 composer dumpautoload
부터vender/composier/autoroad*입니다.php 파일 그룹에 반영됩니다.예를 들어 다음의composier.json
composer.json
{
"name": "suin/myapp",
"require": {
"guzzlehttp/guzzle": "^6.3"
},
"autoload": {
"psr-4": {
"MyApp\\": "src/"
}
}
}
composer dumpautoload
실행 후 아래 맵 정보를 생성합니다.composer dumpautoload
의 선언에 주의하세요.이것은 'MyApp\\' => array($baseDir . '/src')
가방의 종류를 MyApp
목록에 있는 지도 정보입니다.vendor/composer/autoload_psr4.php
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
'MyApp\\' => array($baseDir . '/src'),
'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
);
맞춤법 오류가 있습니까?
흔히 볼 수 있는 것은 클래스 이름과 이름 공간의 맞춤법 오류입니다.
대응 방법: 맞춤법 오류 여부를 일일이 확인
현재 작업 디렉터리는 실행 환경입니까?
현재 당신이 수정한 파일은 실제로 실행 중인 파일이 아닐 수도 있습니다.변경한 반은 사실상 다른 항목의 이름이 같은 반일 수 있습니다.같은 항목에서도 다른 포장의 동명 종류일 수 있다.탭 편집기에도 포장과 경로가 숨겨져 있기 때문에 이런 오류를 알아차리기 어렵다.
처리 방법: 편집기와 다른 방법(CLI)으로 이중 검사
편집기에서만 보면'다른 파일을 완전히 바꿨다'는 것을 깨닫는 데 시간이 오래 걸리기 때문에 우선 명령줄에서 파일 시스템이 변경 사항을 충분히 반영했는지 확인해 보세요.
src
에서 PHP를 실행하는 장소가 예상 장소인지 확인합니다.pwd
에서 클래스 파일이 있는지 확인합니다.변경 사항이 파일 시스템에 저장되었는지
ls
및 cat
에서 확인합니다.❯ cat src/Application.php
<?php
namespace MyApp; // ネームスペースはあっていますか?
class Application // クラス名はあっていますか?
{
}
끝까지 읽어주셔서 감사합니다.트위터에는 Qita에 쓰지 않는 기술 문구도 있으니 편리하면 주목→Twitter@suin
Reference
이 문제에 관하여('Fatal error: Class'...'not found'에 빠졌을 때의 검사 5가지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/suin/items/752f3721c4b9084fef4e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)