Guidva veloce per sviluppare PHP con tecnica Object Oriented.
Creare una classe in PHP
- <?php
- class ClasseMia
- {
- // Definizione dei metodi e delle proprietà
- }
- ?>
Istanziare la classe:
- $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
- <?php
- class ClasseMia
- {
- public $prop1 = “I’m a class property!”;
- public function setProperty($newval)
- {
- $this->prop1 = $newval;
- }
- public function getProperty()
- {
- return $this->prop1 . “<br />”;
- }
- }
- ?>
Metodo costruttore di una classe PHP
- public function __construct()
- {
- echo ‘The class “‘, __CLASS__, ‘” was initiated!<br />’;
- }
Questo metodo viene esegito quando viene istanziata la classe.
Allo stesso modo esiste il metodo distruttore:
- public function __destruct()
- {
- echo ‘The class “‘, __CLASS__, ‘” was destroyed.<br />’;
- }
Effettuare la echo di un oggetto
Per effettuare la echo di un oggetto è necessario definire il metodo __toString della classe:
- public function __toString()
- {
- echo “Using the toString method: “;
- return $this->getProperty();
- }
Estendere una classe
- class SecondaClasse extends ClasseMia
- {
- public function newMethod()
- {
- echo “From a new method in ” . __CLASS__ . “.<br />”;
- }
- }
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.
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
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…
OK! Molto interessante. Unico limite di questo sistema mi sembra l’obbligo di dover mettere tutte le classi in un’unica cartella.
Grazie,
Flavio
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!
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!