Communauté Informatique NDFR.net

Communauté Informatique NDFR.net (http://www.ndfr.net/forums/index.php)
-   Programmation Web (HTML, PHP, ASP, Java, XML, etc.) (http://www.ndfr.net/forums/forumdisplay.php?f=65)
-   -   PHP 5 et Orienté Objet, classes héritées (http://www.ndfr.net/forums/showthread.php?t=6947)

Aka 14-12-2005 22:29

PHP 5 et Orienté Objet, classes héritées
 
Bonjour à tous, je viens d'apprendre a mes depends que les classes heritées en PHP5 n'heritent pas des constructeurs et destructeurs de la classe parente ..

Je voulais donc savoir si il existait un moyen d'automatiser cet heritage, et de quelle manière il était possible d'heriter les constructeurs et destructeurs de classe. ( __construct() et __destruct() )

Il me semble qu'on peux faire apel aux proriétées du parent comme suit, mais j'ai du mal à savoir exactement de quelle manière procéder ..

PHP Code:

parent::__construct(); 


Si vous voyez de qoi je vous parles et que vous trouvez un moyen d'éclairer ma lanterne .. je vous en serait redevable !

Merci :)

fonji 14-12-2005 22:40

Salut !
J'ai jamais fait ça en php mais si c'est comme en java, dans ton constructeur tu appelles en tout premier parent::__construct(); et voilà...

Mais je sais pas du tout si c'est applicable au php... Peut être que ça ne fait pas d'erreur mais pas ce que tu cherches non plus !

J'en sais rien et j'ai pas le temps de tester. Désolé !

EDIT : AHA trouvé quelque chose d'intéressant :
Quote:

Code:

Le fichier pave.php

<?php
require ("rectangle.php");
class pave extends rectangle {
        var $hauteur;
       
        function pave ($larg, $long, $haut) {
                rectangle::rectangle($larg, $long);
                $this->hauteur = $haut;
        }
       
        function volume () {
                return parent::aire()*$this->hauteur;
        }
}
?>

[...]On remarque par ailleurs que le constructeur de la classe pave appelle explicitement le constructeur de sa classe parente, rectangle. En effet, celà n'est pas automatique en php.
ici !

Aka 14-12-2005 23:00

yeah ! impec, tout ce qu'il me fallait en fin de compte !

Juste une question donc .. tu voit l'interet de ne pas faire appel aux constructeurs par defaut ?

Benjy 15-12-2005 08:23

Quote:

Originally Posted by Aka
Juste une question donc .. tu voit l'interet de ne pas faire appel aux constructeurs par defaut ?

Oui : la rétro-compatibilité avec PHP4, qui ne supporte ni __construct() ni __desctruct(). C'est pour ça qu'en général je recommande de créer un constructeur générique (appellons-le toto(), dans la classe toto), que la fonction __construct() appelle.

Démonstration Jeanine :
PHP Code:

class toto
{
    
/* Constructeur PHP5 */
    
function __construct()
    {
        
$this->toto();
    }
    
    
/* Destructeur PHP5 */
    // je ne m'en sers que très rarement...
    
function __destruct()
    {
        
//contenu
    
}
    
    
/* Constructeur générique */
    
function toto()
    {
        
//contenu
    
}



Cougar 15-12-2005 09:16

Quote:

Originally Posted by Aka
yeah ! impec, tout ce qu'il me fallait en fin de compte !

Juste une question donc .. tu voit l'interet de ne pas faire appel aux constructeurs par defaut ?

L'intérêt c'est de pouvoir rajouter des champs dans la classe "descendante".
En syntaxe c++, si tu supposes que t'as une class personne et que tu veux faire une classe étudiant qui hérite de celle-ci ton constructeur ressemblera a ceci :
(dans le .cpp)

Code:


Etudiant::Etudiant(string nom,prénom,int age,_numero) {

numeroEtudiant=_numero // champ de la class étudiant

Personne(nom,prenom,age);  //et on appelle le constructeur du parent

}

Autre solution, faire un truc du genre :
Code:

Etudiant::Etudiant():Personne() {
//code
}

qui appellera automatiquement le constructeur de Personne.

Donc pour résumer ce qui a été dit, pour utiliser le constructeur de la classe parente il faut l'écrire soit même :)


All times are GMT +2. The time now is 13:23.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.