Kontynuujemy poznawanie autoloadingu composerowego – zwracamy uwagę na słowa kluczowe namespace oraz use. Do dzieła.

W naszym folderze framework tworzymy plik Arr.php z klasą Arr:

<?php

namespace Framework;

class Arr{
    
    //(...)

    public static function exceptKeys($assoc, $excluded_fields) {
        return array_diff_key($assoc, array_flip($excluded_fields));
    }

    public static function withoutNumericKeys($arr){
        return array_filter($arr, function($k){
            return !is_numeric($k);
        }, ARRAY_FILTER_USE_KEY);
    }
}

Jak widać namespace zawiera nazwę folderu (plus ewentualne podfoldery) zaś klasa to nazwa pliku bez rozszerzenia.

Swoją drogą – pliki „php only” nie mają tagu zamykającego, na to też zwróćmy uwagę.

Teraz przechodzimy do bootstrap.php:

<?php 

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

use Framework\App;
use Framework\Arr;

$app = new App;
$app->run();
//app in running

$data = [
    'user' => 'John',
    'password' => md5('helloworld'),
    'confirmPassword' => md5('helloworld'),
    'email' => 'john.doe@wp.pl'
];

$excluded_fields = ['password', 'confirmPassword'];

print_r(Arr::exceptKeys($data, $excluded_fields));
//Array ( [user] => John [email] => john.doe@wp.pl )

$jim = ["ID" => 14 , 0 => 14, "name" => "Jim", 1 => "Jim" , "age" => 29, 2 => 29 ];
print_r($jim);
//Array ( [ID] => 14 [0] => 14 [name] => Jim [1] => Jim [age] => 29 [2] => 29 )

print_r(Arr::withoutNumericKeys($jim));
// Array ( [ID] => 14 [name] => Jim [age] => 29 )

Samo użycie już nam dobrze znanej klasy ważne nie jest, ale fakt, w jaki zostaje ona tutaj przekazana. Podajemy namespace-prefix + nazwę klasy.

Dla lepszej czytelności możemy zrobić to tak:

use Framework\{App, Arr};

Na początku mamy namespace-prefix, potem nazwy klas. Autoloading radzi sobie z tym bez problemu. Więcej o tym zagadnieniu w następnych lekcjach.