Posts Tagged ‘poo’

Quand je force un tableau associatif en objet, il devient un objet ayant les propriétés qui étaient les clefs du tableau.

Quand je caste un objet en tableau, le nom des propriétés deviennent des clés du tableau, prenant leur valeur.

Publicités

A quoi sert l’accès statique ?

Dans le manuel PHP, il est dit :

Le fait de déclarer des membres ou des méthodes comme statiques vous permet d’y accéder sans avoir besoin d’instancier la classe.

Donc, l’utilité des accès statiques serait : de ne pas avoir besoin d’objet

Par extension, l’idée est donc de regrouper les méthodes d’une classe dans un conteneur, et ainsi de pouvoir nommer deux méthodes du même nom, et de pouvoir charger le code de ces deux méthodes, car elles appartiennent à une classe différente, ce qui n’est pas possible avec de « simples » fonctions.

Exemple :

include(‘Viande.class.php’); include(‘TarteAuxPommes.class.php’);

Viande::manger();

TarteAuxPommes:manger();

Un stagiaire me propose une définition différente

edit du 8 juillet 2008
une méthode ou un attribut statique est partagé par toutes les instances/objets de la classe, du fait de ne pas dépendre d’un objet en particulier.
ex : un randomizer partagé par toutes les instances ou encore un compteur qui compte le nombre d’instances en cours.

De façon étonnante en PHP, on peut accéder à une propriété privée de la classe mère, depuis la classe fille, en utilisant une méthode non-redéfinie dans la classe fille. Cela reste dans la logique de PHP, puisque la méthode utilisée est celle de la classe mère

</pre><br />
<pre>class Gateau{<br />
        private $nbParts = 6;</p>
<p>    public function vendre($nbParts, $destinataire)<br />
    {<br />
        echo 'Je vends '.$nbParts. ' parts de gâteau à '.$destinataire;<br />
    }</p>
<p>    public function getParts()<br />
    {<br />
        echo ' Mon objet '.__CLASS__.' a '.$this->nbParts. ' parts.';<br />
    }<br />
}</p>
<p>class Tarte extends Gateau{<br />
    private $nbParts = 8;</p>
<p>    public function vendre($nbParts)<br />
    {<br />
    //Je définis une méthode de la classe fille, dont le prototype m'indique<br />
    // que j'ai  plus d'arguments que la mm méthode de la classe mère</p>
<p>    echo 'Je vends '.$nbParts. ' parts de gâteau';<br />
    }<br />
}</p>
<p>$pie = new Tarte;<br />
$pie->vendre(5);<br />
$pie->getParts();// j'accède à la méthode parente, donc au nb de parts de la classe parente</p>
<p>

En PHP5, avec l’amélioration de la POO, on a la possibilité de mettre en place des constantes de classe.

Ces constantes permettent d’enregistrer une valeur qu’on réutilise et qui n’est pas modifiée. Ces constantes ne sont accessibles que de manière statique, depuis la classe, et non pas depuis une instance de la classe.


classe Tarte{

const NB_PARTS = 8;

}

//pour y accéder, je dois le faire en statique

echo Tarte::NB_PARTS;

PHP propose un modèle d’héritage strict, qui veut que les méthodes re-déclarées dans la classe fille prennent au minimum le même nombre d’argument que la méthode de la classe mère.

class Gateau{
private $nbParts = 6;
public function vendre($nbParts, $destinataire)
{
echo ‘Je vends ‘.$nbParts. ‘ parts de gâteau à ‘.$destinataire;
}

public function getParts()
{
echo ‘ Mon objet ‘.__CLASS__.’ a ‘.$this->nbParts. ‘ parts.’;
}
}

class Tarte extends Gateau{
private $nbParts = 8;
public function vendre($nbParts)
{
//Je définis une méthode de la classe fille, dont le prototype m’indique
// que j’ai plus d’arguments que la mm méthode de la classe mère
echo ‘Je vends ‘.$nbParts. ‘ parts de gâteau’;
}
}
Mais en réalité, PHP me laisse (toujours la souplesse du langage) définir une méthode fille, dont la signature est différente de la méthode de la classe mère qu’elle redéfinit.La réponse est donc : oui.