Nå som vi har en klasselaster kan vi fjerne alle include kall som kun laster klasser og funksjoner inn i minnet.
Konsolider klasser:
- Finn en
include()
setning som laster inn en klassedefinisjon - Flytt fila til
src/
slik at den plukkes opp av autolasteren - Fjern alle linjer i kodebasen som inkluderer den klassedefinisjonen
For å finne alle linjer som inkluderer f.eks. User.php
bruker vi regex:
$ ack "^[ \t]*(include|include_once|require|require_once).*User\.php"
Konsolider funksjoner
Autolasting fungerer kun med klasser. Legacy kodebaser har typisk en stor mengde globale funksjoner som lastes inn med include.
Løsningen her er å flytte funksjoner inn i klasser og kalle på dem som statiske metoder på klassene.
Den generelle prosessen for å konsolidere funksjoner:
- Finn en include setning som laster inn en funksjonsdefinisjon
- Konverter fila til en klasse med funksjonen som statisk metode
- Konverter alle funksjonskall til statisk metodekall
- Flytt klassefila til sentral klassemappe
- Fjern alle linjer som inkluderer klassedefinisjonen
Her er et eksempel på en kandidat.
Page.php:
<?php
require 'utils/http.php';
class Page
{
function render()
{
redirect('/home');
}
}
utils/http.php:
<?php
function redirect($location)
{
header("Location: $location");
}
Konverter til statisk metode:
utils/http.php:
<?php
class Http
{
public static function redirect($location)
{
header("Location: $location");
}
}
Konverter til metodekall:
Page.php:
<?php
require 'utils/http.php';
class Page
{
function render()
{
Http::redirect('/home');
}
}
Flytt klassefila til sentral klassemappa:
$ mv utils/http.php classes/Http.php
Fjern opprinnelig include setning:
Page.php:
<?php
class Page
{
function render()
{
Http::redirect('/home');
}
}
For å finne alle kall til redirect kan vi bruke regex:
$ ack "header\s*\("