IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Héritage KO après MAJ d'Apache. [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut Héritage KO après MAJ d'Apache.
    Bonjour à tous,

    J'ai 2 serveurs, 1 en PHP Version 5.0.5 et l'autre en PHP Version 5.3.0 qu'on viens de monter.
    Les 2 sont sur un Suze et tournent avec Apache 2.
    Je dois passer mon script du 1er vers le 2ème.
    Sur le 1er, il fonctionne très bien, mais sur le 2ème, le script s'arrête sur "parent::".
    Est ce que la façon de faire de l'héritage à changé entre ces versions ou est ce que c'est un paramétrage à faire dans le php/apache ?

    Dans le fichier fpdf.php, j'ai une classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class FPDF {
       function FPDF($orientation='P', $unit='mm', $format='A4') {
    	echo "1>FPDF<br />"; // Ne s'affiche plus
       }
    }
    Dans le fichier pdfGen.class.php, j'ai 2 classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    include($racineApp.'pdf/fpdf.php'); // Inclusion de la classe php FPDF
    class PDF_ImageAlpha extends FPDF {
       // Sans constructeurs
    }
    class FPDF_Protection extends PDF_ImageAlpha {
        function FPDF_Protection($orientation='P',$unit='mm',$format='A4') {
    		echo "1>FPDF_Protection<br />"; // S'affiche
    		parent::PDF_ImageAlpha($orientation,$unit,$format);
    		echo "2>FPDF_Protection<br />"; // Ne s'affiche pas
     
        }
    }
    Et enfin, dans mon script final pdfGen.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    include_once($racineApp."class/pdfGen.class.php"); // Inclusion de la bibliotheque qui genere les pdf
    ...
    $pdf = new FPDF_Protection($paysage,"mm",array($hauteur,$largeurPagePDF));
    Est ce que quelqu'un à une idée ?

    Merci d'avance.

  2. #2
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    C'est bon, ça fonctionne.

    Le fait de mettre un constructeur bête et méchant dans PDF_ImageAlpha a suffit.

    Il est plus intransigeant avec l'age... ;-)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Pour info la gestion des constructeurs a encore changé avec PHP 5.3.3 ... ça bouge un peu dans tous les sens PHP en ce moment ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Bar {
        public function Bar() {
            // treated as constructor in PHP 5.3.0-5.3.2
            // treated as regular method in PHP 5.3.3
        }
    }

  4. #4
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Merci pour l'info, ça servira.

    Mais du coup, comment est ce qu'on fait le constructeur si une fonction du même nom ne suffit plus ?

    Il faudra qu'elle se nomme obligatoirement __constructor ?
    Ou alors il faudra remplacer function par constructor ?

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    Mais du coup, comment est ce qu'on fait le constructeur si une fonction du même nom ne suffit plus ?
    Utiliser le constructeur officiel depuis php5 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public function __construct(){
    }

  6. #6
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Ok, autant commencer à prendre des bonnes habitudes dès maintenant.

    Merci à vous 2.

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    Citation Envoyé par dacid Voir le message
    Ok, autant commencer à prendre des bonnes habitudes dès maintenant.

    Merci à vous 2.
    Me semble que c'est comme ça depuis la sortie de php 5 (6 ans) donc ca devient effectivement interessant de s'y mettre

  8. #8
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Pffff, et personne me dit rien !!!

  9. #9
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Aie,

    Du coup, ça plante. Dans le __construct de ma classe FPDF_Protection extends PDF_ImageAlpha:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parent::PDF_ImageAlpha($orientation,$unit,$format);
    Me répond:
    Fatal error: Call to undefined method PDF_ImageAlpha::pdf_imagealpha() in ...

  10. #10
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    Pourquoi faire des appel statique ?
    Ne devrais tu pas essayer quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function __construct() {
        parent::__construct();
        $this->PDF_ImageAlpha($orientation,$unit,$format);
    }

  11. #11
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    C'est à dire que le __construct de PDF_ImageAlpha est vide et j'ajoute une fonction du nom de la classe qui aurait les paramètres qui sont actuellement dans le constructeur ?

    Pas du progrès tout ça...

    Sinon, je viens de télécharger un manuel récent (2010), et dans constructeurs, ils indiquent bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    La fonction constructeur a le même nom que la classe. Une fonction devient le constructeur si elle porte le même nom que la classe. Si une classe n'a pas de constructeur, le constructeur de la classe de base sera appelé, s'il existe. 
     
    <?php
    class Auto_Panier extends Panier {
        function Auto_Panier () {
            $this->add_item ("10", 1);
        }
    }
    ?>
    Je crois que je vais rester avec l'ancienne méthode...

  12. #12
    Invité
    Invité(e)
    Par défaut
    Je te conseillerais plutôt cette lecture : http://fr2.php.net/manual/fr/language.oop5.decon.php

    Pour des raisons de compatibilité ascendante, si PHP 5 ne peut pas trouver une fonction __construct() pour une classe donnée, il cherchera une fonction constructeur représentée, comme dans l'ancien style (PHP < 5), par le nom de la classe. Effectivement, cela signifie que le seul cas où il pourrait y avoir un problème de compatibilité est celui où votre classe contiendrait une méthode nommée __construct() et que vous en ayez un autre usage.

  13. #13
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Très bonne lecture, en effet.

    Donc, je ne suis pas obligé de faire un constructeur vide qui ne sert à rien et d'appeler une fonction qui ferait ce que que faisait le constructeur avant.

    Je peux faire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parent::__construct($orientation,$unit,$format);
    Vu qu'il ne peut y avoir d'héritage multiple...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déclenchement de l'événement click après maj d'une valeur
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 14/10/2007, 15h14
  2. Réponses: 14
    Dernier message: 07/02/2007, 15h44
  3. Réponses: 7
    Dernier message: 25/07/2006, 18h45
  4. Réponses: 2
    Dernier message: 01/06/2006, 07h58
  5. Réponses: 12
    Dernier message: 22/12/2005, 09h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo