2014-12-18 17 views
7

Tiêu đề tự nói lên. Vì vậy, đây là cấu trúc dự án của tôi:Lớp Compoloader của Trình soạn thảo PHP không tìm thấy Ngoại lệ

|src 
    |Database 
     |Core 
      |MySQL.php 
     |Support 
    start.php 
|vendor 
composer.json 
index.php 

tập tin MySQL.php:

<?php 
namespace Database\Core; 
//Some methods here 

index.php và các tập tin start.php:

//start.php file 
<?php 
require __DIR__ . '/../vendor/autoload.php'; 
?> 

//index.php file 
<?php 
use Database\Core; 
require __DIR__ . '/src/start.php'; 

$mysql = new MySQL(); // Gets exception Class 'MySQL' cannot found etc. 
?> 

Và cuối cùng phần composer.json autoload của tôi :

"autoload": { 
    "psr-4": "Database\\": "src/" // Also tried "src/Database" too 
} 

Sự cố xảy ra ở đâu? Tôi thực sự mệt mỏi vì cố gắng đương đầu với tình huống này. Xin hãy giúp các bạn! Cảm ơn.

Trả lời

17

Bạn cần phải bao gồm không gian tên khi bạn đang khởi tạo một lớp:

$mysql = new Database\Core\MySQL(); 

hoặc

use Database\Core\MySQL; 
$mysql = new MySQL(); 

Xem Using namespaces: Aliasing/Importing

+1

Cảm ơn tôi rất biết ơn nhưng không thể bỏ phiếu vì danh tiếng thấp :) – lostbyte

+0

Hãy để tôi bầu chọn cho bạn :) –

4

Bên cạnh không sử dụng câu lệnh đúng use như đã đề cập, PSR -4 không hoạt động như thế. Đó là một bí danh. Về cơ bản, bạn nói rằng src bằng Database. Vì vậy, để có một thư mục có tên là Database trong đó sẽ ngụ ý rằng không gian tên + lớp hoàn toàn đủ điều kiện bằng 'Database \ Database \ Core \ MySQL`. Bạn muốn sử dụng PSR-0 trong trường hợp này, hoặc điều chỉnh định nghĩa PSR-4 của bạn.

+0

Để mở rộng một chút về câu trả lời hay này: bạn sẽ không muốn không gian tên của bạn trở thành thứ gì đó giống như "Cơ sở dữ liệu". Bạn muốn sử dụng thứ gì đó mà không có gói php nào khác có thể đã sử dụng, vì vậy tên của công ty/tổ chức của bạn là một lựa chọn tốt, ví dụ: nếu công ty của bạn có tên Acme Baseball Cards, một không gian tên tốt có thể là "AcmeBaseball". Trong tệp Mysql.php của bạn thì vùng tên sẽ là 'không gian tên AcmeBaseball \ Database \ Core;' và trong composer.json '" psr-4 ":" AcmeBaseball \\ ":" src/"' Bạn sẽ nhận thấy điều này nếu bạn cài đặt gói trình soạn thảo như SDK AWS Php; mở compser.json của họ và không gian tên là 'Aws' – KayakinKoder

Các vấn đề liên quan