Piccola Guida OO in PHP

Guidva veloce per sviluppare PHP con tecnica Object Oriented.

Creare una classe in PHP

  1. <?php
  2. class ClasseMia
  3. {
  4. // Definizione dei metodi e delle proprietà
  5. }
  6. ?>

Istanziare la classe:

  1. $obj = new ClasseMia;

Definire le proprietà

public $proprieta = “Questa è la proprieta”;

Stampare la proprietà

Dopo aver instanziato la classe:

echo $obj->prop1;

Definire i metodi di una classe in PHP

  1. <?php
  2. class ClasseMia
  3. {
  4. public $prop1 = “I’m a class property!”;
  5. public function setProperty($newval)
  6. {
  7. $this->prop1 = $newval;
  8. }
  9. public function getProperty()
  10. {
  11. return $this->prop1 . “<br />”;
  12. }
  13. }
  14. ?>

Metodo costruttore di una classe PHP

  1. public function __construct()
  2. {
  3. echo ‘The class “‘, __CLASS__, ‘” was initiated!<br />’;
  4. }

Questo metodo viene esegito quando viene istanziata la classe.

Allo stesso modo esiste il metodo distruttore:

  1. public function __destruct()
  2. {
  3. echo ‘The class “‘, __CLASS__, ‘” was destroyed.<br />’;
  4. }

Effettuare la echo di un oggetto

Per effettuare la echo di un oggetto è necessario definire il metodo __toString della classe:

  1. public function __toString()
  2. {
  3. echo “Using the toString method: “;
  4. return $this->getProperty();
  5. }

Estendere una classe

  1. class SecondaClasse extends ClasseMia
  2. {
  3. public function newMethod()
  4. {
  5. echo “From a new method in ” . __CLASS__ . “.<br />”;
  6. }
  7. }

Eseguire i metodo della classe padre:

parent::__construct();

Proprietà e metodi statici

Sono proprietà e o metodi comuni a ogni oggetto che instanzia la classe. Inoltre non necessitano di instanziare la classd.

5 commenti su “Piccola Guida OO in PHP”

  1. Grandissimo articolo! Apprezzo molto il tuo blog e lo seguo da tempo. Per rendere più completo l’articolo, ti chiederei (scusandomi per l’ignoranza che sto dimostrando) se possibile di aggiungere come si potrebbero organizzare le classi a livello di file. Ad esempio: un file per ogni classe o più classi in un file? Se un file per ogni classe, che nome conviene dare al file?

    Grazie,
    Flavio

  2. Ciao io utilizzo un file per ogni classe…
    Inoltre il nome del file deve avere lo stesso nome della classe e utilizzare la funzione

    function __autoload($className) {
    if (file_exists($className . ‘.php’)) require $className . ‘.php’;
    else throw new Exception(‘Class “‘ . $className . ‘” could not be autoloaded’);
    }

    che viene eseguita quando viene istanziata una classe. In questo modo nn è necessario inserire a mano tutte le include/require…

  3. Eventualmente è possibile modificare opportunamente la funzione __autoload in maniera tale che legga anche nelle sottodirectory… (ma penso che questo potrebbe essere molto pensante per progetti corposi) opppure è possibile creare un Map tra nomi classi e directory….

    Invece con i framework come Zend, Solar o Symfony ci sono già delle funzionalità implementate, ad esempio la classe Vendor_User() è associata automanticamente al file User nella cartella Vendor (Vendor/User.php)

    Non ti so dire di + al momento xke nn ne ho mai utilizzato uno… ma penso che tali framework siano molto utili..

    Se trovi alternative non esitare a condividerle.

    Grazie a te!

  4. Grande spiegazione! Secondo me splittando la stringa Vendor_User in due parti, avendo come separatore sempre l’underscore (_), si ricava la cartella e il nome del file. Forse è più semplice di quanto pensassi.

    Di nuovo grazie e complimenti!

Lascia un commento