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.