Uczymy się jak sprawić, aby funkcje również podlegały mechanizmowi autoloadingu, na podstawie przykładu z lekcji poprzednich. Do dzieła.

Zmodyfikujemy sobie naszą klasę App (folder powinniśmy już umieć wydedukować po namespace):

<?php

namespace Framework;

class App
{
    private $running = false;

    public function run(){
        $this->running = true;
        echo "App is running";
    }

    public function isRunning(){
        return $this->running;
    }
}

Teraz w odpowiednim folderze (wydedukujmy jakim) tworzymy plik Middleware.php:

<?php

namespace App\Config;

use Framework\App;


function registerMiddleware(App $app)
{
  if($app->isRunning()){
    echo "App already running!";
    return;
  }
  echo "I REGISTER MIDDLEWARE </br>";
}

Teraz musimy ten plik dodać do composer.json:

{
    "name": "sites/sometry2",
    "type": "project",
    "require": {}, 
    "autoload": {
        "psr-4": {
        "Framework\\": "src/Framework",
        "App\\": "src/App"
        },
        "files": [
        "src/App/Config/Middleware.php"
        ]
    }
}

Jeszcze odpowiednia komenda:

composer dump-autoload

Możemy przejść do bootstrap.php i użyć funkcji, importując ją za pomocą use:

<?php 

require __DIR__ . "/../../vendor/autoload.php";

use Framework\{App, Arr};
use function App\Config\{registerMiddleware};

$app = new App;
registerMiddleware($app);
$app->run();

Działa jak należy.