Composer – частина 4. Composer autoload

Для автозавантаження класів і функцій в composer використовуються autoload та autoload-dev.

autoload – автозавантаження для PHP. Підтримує psr-4, psr-0, classmap та files.

# PSR-4

Класи завантажуються на основі шляхів до файлів від кореня додатку, які базуються на namespaces. В одному файлі – один клас згідно розміщення. Наприклад:

"autoload": {
    "psr-4": {
    	"App\\": "app/",
    	"Foo\\": "src/"
    }
}

Доступними будуть:

new \App\Psrfour() – файл app/Psrfour.php:

namespace App;
class Psrfour {
	// TODO
}

new \App\Subfolder\Psrfoursub() – файл app/Subfolder/Psrfour.php

namespace App\Subfolder;
class Psrfoursub {
	//TODO
}

new \Foo\Bar\Baz() – файл src/Bar/Baz.php

namespace Foo\Bar;
class Baz {
	// TODO
}

В Laravel цей тип автозавантаження використовується для власне побудови всієї логіки сайту в директорії App відносно кореню проекту.

# PSR-0

Класи завантажуються на основі шляхів до файлів від кореня пакету. Після впровадження PSR-4 використовується рідко.

# Classmap

Сканує всі файли (і в піддиректоріях) з розширенням .php або .inc для підключення КЛАСІВ до проекту (може бути безліч в одному файлі). Ці файли будуть додані до автозавантаження, в них не повинно міститися namespace.

"autoload": {
	"classmap": [
    	"lib/", "Something.php"
    ]
}

new \Def() – файл lib/Abc.php – ім’я не важливо

class Def {
	// TO DO
}

Після зміни імені файлу або додаванні нового класу необхідно виконувати команду composer dump-autoload для оновлення автозавантаження. Інформація щодо розміщення класу кешується в vendor/composer/autoload_classmap.php

В Laravel цей тип автозагрузки використовується для підключення класів seeds та factories.

# Files

Використовується для завантаження ФУНКЦІЙ конкретного файлу. Наприклад,

"autoload": {
	"files": [
	    	"lib/helper.php"
	]
}

файл lib/helper.php

function helper_function(){
	// TO DO
}

autoload-dev – аналогічно autoload але лише для потреб розробки (development). В Laravel використовується для завантаження тестів:

"autoload-dev": {
    "psr-4": {
        "Tests\\": "tests/"
    }
},

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *