Je reviens vous voir pour m'aider à comprendre le fonctionnement OO de PHP5.
Lors d'un de mes développements, j'ai découvert qu'en PHP, dans une méthode statique d'une classe, d'accéder aux attributs protégés d'une instance de cette classe.
Comme un petit exemple vaut mieux qu'un grand discours, voici un exemple illustrant mes propos :
<?php
error_reporting(E_ALL); // Pour être sûr de voir toutes les erreurs, même les E_STRICT
class Statut
{
// *************
// *** Attributs de la classe
// *************
protected $code; // Ces attributs sont de visibilité "Protected"
protected $message;
// *************
// *** Méthode de la classe
// *************
static public function get_db_statut()
{ // Cette méthode est statique, donc pas d'instance de l'objet
// Instanciation du nouvel objet statut
$o_statut = new Statut();
// Modification des attributs de visibilité "Protected" de l'instance de la classe, créé dans la méthode
$o_statut->code = "Mon code";
$o_statut->message = "Mon message" ;
return $o_statut;
}
}
echo "Appel de la méthode statique<br />";
$o_statut = Statut::get_db_statut(); // Aucune erreur affichée
print_r($o_statut); // Les attributs de l'objet ont bien été affectés
echo "Modification d'un des attributs d'une instance de la classe<br />";
$o_statut = new Statut();
$o_statut->code = "Mon code"; // Modifications d'attributs de visibilité "protected"
$o_statut->message = "Mon message" ; // Une erreur intervient
Or, je sais qu'en Java et en C++, ce n'est pas possible de faire ça ...J'aimerais donc que l'on m'explique pourquoi PHP l'implémente :S