Per offrirti un'esperienza di navigazione sempre migliore, questo sito utilizza cookie propri e di terze parti, partner selezionati. I cookie di terze parti potranno anche essere di profilazione.
Le tue preferenze si applicheranno solo a questo sito web. Puoi modificare le tue preferenze in qualsiasi momento ritornando su questo sito o consultando la nostra informativa sulla riservatezza.
E' possibile rivedere la nostra privacy policy cliccando qui e la nostra cookie policy cliccando qui.
Per modificare le impostazioni dei cookies clicca qui
  • seguici su feed rss
  • seguici su twitter
  • seguici su linkedin
  • seguici su facebook
  • cerca

SEI GIA' REGISTRATO? EFFETTUA ADESSO IL LOGIN.



ricordami per 365 giorni

HAI DIMENTICATO LA PASSWORD? CLICCA QUI

NON SEI ANCORA REGISTRATO ? CLICCA QUI E REGISTRATI !

Effettuare il caricamento automatico di classi con Composer, il noto gestore di dipendenze PHP

di :: 03 novembre 2020
Effettuare il caricamento automatico di classi con Composer, il noto gestore di dipendenze PHP

Ci siamo già occupati di autoloading delle classi PHP in un precedente articolo, che ti invito a leggere.

Il caricamento automatico delle classi è diventato un apetto importante nella programmazione moderna: con questo sistema non dobbiamo più preoccuparci di includere le nostre classi PHP nei file del nostro progetto, e questo è utile sopratutto quando abbiamo a che fare con molte classi.

Il nostro progetto è localizzato della directory "/var/www/html/test", ed è stutturato con una "index.php" ed una alberatura di directory e files

index.php
   Lib
      Admin
         Ruoli.php
      User
         Info.php

Nella cartella "Lib" abbiamo una sottodirectory "Admin" che contiene un file "Ruoli.php", con una classe "Ruoli" e con un namespace uguale al path in cui si trova cioè "Lib\Admin"

<?php
namespace Lib\Admin;

class Ruoli{
	public function __construct()
	{
		echo "ciao dalla classe ".__CLASS__;
	}
}
?>

Sempre nella cartella "Lib" abbiamo una sottodirectory "User" che contiene un file "Info.php", con una classe "Info" e con un namespace uguale al path in cui si trova cioè "Lib\User"

<?php
namespace Lib\User;

class Info{
	public function __construct()
	{
		echo "ciao dalla classe ".__CLASS__;
	}
}
?>

Entrambe le classi hanno un metodo costruttore che, come ben sappiamo, viene automaticamente chiamato quando viene istanziato un oggetto della classe.

Nella "index.php", in cui voglio utilizzare le due classi, dovrò includere i file che contengono le classi e poi istanziare gli oggetti, utizzando un QUALIFIED NAME cioè indicando il namespace delle classi:

<?php
include "Lib/Admin/Ruoli.php";
include "Lib/User/Info.php";

$obj=new Lib\Admin\Ruoli();
echo "<br>";
$obj=new Lib\User\Info();
?>

Se avessimo molte classi, utilizzare questa metodologia di lavoro questo diventerebbe molto faticosa.

Vediamo come fare la stessa cosa usando Composer utilizzando il suo autoload.

Affinchè Composer possa generare il file di autoload, abbiamo bisogno di un file composer.json come, ad esempio, questo:

{
  "name": "class-tutorial",
  "description": "Ecco un tutorial con Composer",
  "license": "MIT",
  "authors": [
    {
      "name": "Mario",
      "email": "mario@gmail.com"
    }
  ],
  "autoload": {
    "classmap": [
      "Lib/Admin",
      "Lib/User"
    ]
  }
}

Questo file è in formato JSON, all'interno del quale ci sono delle informazioni, tra cui la chiave "classmap", un oggetto che contiene la lista dei path specifici delle nostre classi.

Carichiamo questo file nella root del progetto, cioè /var/www/html/test (dove è localizzata anche la "index.php"), e, usando un terminale, andiamo a posizionarci in questa cartella

cd /var/www/html/test

Adesso lanciamo il seguente comando:

composer update

verrà così generata una cartella "vendor" all'interno della root del nostro progetto, all'interno di questa cartella c'è il file "autoload.php" che ci servirà per caricare automaticamente le classi.

Nel file "index.php" includiamo questo questo file generato da composer, e senza includere più i due file "Lib/Admin/Ruoli.php" e "Lib/User/Info.php", instanziamo un oggetto delle classi Ruoli e Info

<?php
require_once __DIR__.'/vendor/autoload.php';

$obj=new Lib\Admin\Ruoli();
echo "<br>";
$obj=new Lib\User\Info();
?>

Ogni volta che si modifica il file composer.json, ad esempio se si aggiungono nuove classi, bisogna lanciare il comando "dump-autoload" per aggiornare l’autoloader di composer

composer dump-autoload

Ultima nota: in questo esempio abbiammo creato l'alberatura, i nomi dei file e delle classi, utilizzando uno standard di programmazione PHP chiamato psr-4, ed utilizzato specificatamente per la generazione di autoloading dei file. Ce ne occuperemo dettagliatamente in un prossimo articolo.

Stay tuned!

Potrebbe interessarti

 
 
 
 
pay per script

Hai bisogno di uno script PHP personalizzato, di una particolare configurazione su Linux, di una gestione dei tuoi server Linux, o di una consulenza per il tuo progetto?

x

ATTENZIONE