😅Sử dụng namespace cho theme, plugin, autoload p1 (ok)

Đọ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

<?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

<?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

<?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

{
  "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

<?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

<?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

{
  "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

<?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

<?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

<?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>';

Last updated