Đọc thêm: https://lernphp.gitbook.io/project/chung-ta-se-thao-luan-rieng-ve-chu-de-autoload-optimizing-php-autoloading-psr4-and-composer-ok
Đây nếu không sử dụng autoload thì nó sẽ như này đây, phức tạp vô cùng
C:\xampp82\htdocs\wp4\wp-content\themes\auto\functions.php
Copy <?php
include 'app\controllers\HomeController.php';
include 'app\controllers\TestController.php';
$test = new App\Controllers\HomeController();
echo $test->getName();
C:\xampp82\htdocs\wp4\wp-content\themes\auto\app\controllers\TestController.php
Copy <?php
namespace App\Controllers;
class TestController
{
private $name = 'TestController';
public function getTest()
{
return $this->name;
}
}
C:\xampp82\htdocs\wp4\wp-content\themes\auto\app\controllers\HomeController.php
Copy <?php
namespace App\Controllers;
use App\Controllers\TestController;
class HomeController
{
private $name = 'HomeController';
public function getName()
{
$test = new TestController();
return $this->name . ' 😑 ' . $test->getTest();
}
}
Kết quả
Sử dụng 2 autoload không được nó sẽ báo lỗi, do đó chỉ có thể sử dụng 1 trong 2
Sử dụng 1 cấp
C:\xampp82\htdocs\wp4\wp-content\themes\auto\test\composer.json
Copy {
"name": "test/test-auto",
"authors": [
{
"name": "Leon Weidauer",
"email": "leon@lnwdr.de"
}
],
"require": {},
"autoload": {
"psr-4": {
"Hi\\": "folder/"
}
}
}
C:\xampp82\htdocs\wp4\wp-content\themes\auto\test\folder\Controllers\HomeController.php
Copy <?php
namespace Hi\Controllers;
use Hi\Models\User;
class HomeController
{
public function actionIndex()
{
return (new User)->list();
}
}
C:\xampp82\htdocs\wp4\wp-content\themes\auto\test\folder\Models\User.php
Copy <?php
namespace Hi\Models;
class User
{
public function list()
{
// TODO: get actual data
return [1, 2, 3];
}
}
Sử dụng 2 cấp
C:\xampp82\htdocs\wp4\wp-content\themes\auto\test2\composer.json
Copy {
"name": "test/test-auto",
"authors": [
{
"name": "Leon Weidauer",
"email": "leon@lnwdr.de"
}
],
"require": {},
"autoload": {
"psr-4": {
"Hi\\Lionel\\": "hello/world/"
}
}
}
C:\xampp82\htdocs\wp4\wp-content\themes\auto\test2\hello\world\Controllers\HomeController.php
Copy <?php
namespace Hi\Lionel\Controllers;
use Hi\Lionel\Models\User;
class HomeController
{
public function actionIndex()
{
return (new User)->list();
}
}
C:\xampp82\htdocs\wp4\wp-content\themes\auto\test2\hello\world\Models\User.php
Copy <?php
namespace Hi\Lionel\Models;
class User
{
public function list()
{
// TODO: get actual data
return [1, 2, 3,4];
}
}
Sử dụng
C:\xampp82\htdocs\wp4\wp-content\themes\auto\functions.php
Copy <?php
// require __DIR__ . '/vendor/autoload.php';
// use Viblo\Controllers\HomeController as HomeController1;
// $homeCtrl1 = new HomeController1();
// echo '<pre>';
// var_export($homeCtrl1->actionIndex());
// echo '</pre>';
// require __DIR__ . '/test/vendor/autoload.php';
// use Hi\Controllers\HomeController as HomeController2;
// $homeCtrl2 = new HomeController2();
// echo '<pre>';
// var_export($homeCtrl2->actionIndex());
// echo '</pre>';
require __DIR__ . '/test2/vendor/autoload.php';
use Hi\Lionel\Controllers\HomeController as HomeController3;
$homeCtrl3 = new HomeController3();
echo '<pre>';
var_export($homeCtrl3->actionIndex());
echo '</pre>';