begin process at 2012 05 31 01:38:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

POO

 > 

Classes & Objets

 > 

Problème héritage PHP5


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème héritage PHP5

lundi 2 juin 2008 à 08:13:05 | Problème héritage PHP5

gonZoo2

J'ai rencontré un problème donc car je souhaite créer des classes à l'image du langage Java

 

Voici donc les classes et le code que j'ai réalisé :

object.class.php

[code]

<?php

 

/**

 * Object

 *

 */

class Object {

 

    function __construct() { }

 

    /**

    * Return an array of class' properties

    * @access public

    * @param string $className optional

    * @return array

    */

    final static public function getProperties( $className=null ) {

 

        $className = $className == null ? self::getName() : $className;

 

        $array = get_class_vars( $className );

        $tmp = array();

        while(list($name, $notUsed) = each($array)) {

 

            $tmp[] = $name;

        }

        return $tmp;

    }

 

    /**

    * Return an array of class' methods

    * @access public

    * @param string/null $classname

    * @return array

    */

    final static public function getMethods( $className=null ) {

 

        $className = $className == null ? self::getName() : $className;

 

        $array = get_class_methods( $className );

        return $array;

    }

 

    /**

    * Return the class' name

    * @access public

    * @return string

    */

    static public function getName() {

 

        return __CLASS__;

    }

 

    /**

    * Assign a value to a property

    * @access public

    * @param string/array $name

    * @param mixed $value

    */

    final public function set( $name, $value=null ) {

 

        if(is_array($name)) {

 

            $this->setFromArray($name);

        }

        else {

 

            if(property_exists($this, $name)) {

 

                $this->$name = $value;

            }

            else {

 

                throw new Exception('Property doesn\'t exist(' . $name . ')');

            }

        }

    }

 

    /**

    * Return a property's value

    * @access public

    * @param string $name

    * @return mixed

    */

    final public function get( $name ) {

 

        $return = false;

        if(property_exists($this, $name)) {

 

            $return = $this->$name;

        }

        else {

 

            throw new Exception('Property doesn\'t exist(' . $name . ')');

        }

        return $return;

    }

 

    /**

    * Assign a value to several properties from an array

    * @access public

    * @param array $array

    */

    final public function setFromArray( $array ) {

 

        if(is_array($array)) {

 

            while(list($name, $value) = each($array)) {

 

                try {

                    $this->set($name, $value);

                }

                catch(Exception $e) {

 

                    throw new Exception($e->getMessage());

                }

            }

        }

        else {

 

            throw new Exception('Wrong usage of setFromArray($array)');

        }

    }

 

    /**

    * Initialize an object

    * @access public

    */

    final public function reset() {

 

        $array = get_class_vars($this->getName());

        try {

            $this->setFromArray( $array );

        }

        catch(Exception $e) {

 

            throw new Exception($e->getMessage());

        }

    }

}

 

?>

[/code]

 

singleton.class.php

[code]

<?php

 

/**

 * Singleton

 *

 */

class Singleton extends Object {

 

    /**

    * Instance of Singleton

    * @var resource

    * @access public

    */

    static public $instance = null;

 

    function __construct(){

 

        try {

 

            $this->reset();

        }

        catch(Exception $e) {

 

            throw new Exception($e->getMessage());

        }

    }

    /**

    * Return the class' name

    * @access public

    * @return string

    */

    static public function getName() {

 

        return __CLASS__;

    }

 

    /**

    * Return the instance of Class

    * @access public

    * @return resource

    */

    static public function getInstance() {

 

        $className = self::getName();

 

        try {

            self::$instance = self::$instance == null ? new $className() : self::$instance;

        }

        catch(Exception $e) {

 

            throw new Exception($e->getMessage());

        }

 

        return self::$instance;

    }

}

?>

[/code]

 

site.class.php

[code]

<?php

/**

 * Site

 *

 */

class Site extends Singleton {

 

    public $address = null;

    public $name = null;

    private $path = null;

 

    function __construct(){

 

        try {

            parent::__construct();

            $this->reset();

            $this->setPath();

        }

        catch(Exception $e) {

 

            //echo $e->getMessage();

            throw new Exception($e->getMessage());

        }

    }

    /**

    * Return the class' name

    * @access public

    * @return string

    */

    static public function getName() {

 

        return __CLASS__;

    }

 

    /**

    * Set the path property

    * @access private

    */

    private function setPath() {

 

        $value = dirname(__FILE__);

 

        try {

            $this->set('path', $value);

        }

        catch(Exception $e) {

 

            throw new Exception($e->getMessage());

        }

    }

}

 

?>

[/code]

 

le script

[code]

try {

 

    $site = Site::getInstance();

    $site->setFromArray( array("address" => "http://localhost/", "name" => "Titre du site") );

 

    include_once("templates/header.php");

 

    //var_dump(getClasses());

    //var_dump($site);

 

    include_once("templates/footer.php");

}

catch(Exception $e) {

 

    //throw new Exception($e->getMessage());

    echo $e->getMessage();

}

[/code]

 

Pour l'historique, j'ai surchargé getName() car quelquesoit la classe, le script me renvoyé toujours Object

Ensuite, j'ai du ajouté la fonction reset() dans le constructeur de chaque classe, fille de Object ; je rencontrais le même problème....

Et là, je suis paumé car l'exception Property doesn't exist(instance) est levée

 

Dites moi où je fais fausse route

Dailleurs, pourquoi j'ai une erreur E_STRICT lorsque le constructeur de Singleton est private tantdis que le constructeur de Object est public ?

Merci par avance


lundi 2 juin 2008 à 22:15:16 | Re : Problème héritage PHP5

malalam

Administrateur CodeS-SourceS
Réponse acceptée !
Hello,

http://www.php.net/manual/en/language.oop5.late-static-bindings.php

Pour la suite :
pare que ton code est vraiment tordu ;-)
Et que tu lis mal la doc, en plus...;-)
'est la méthode Object::set() qui foire :
if(property_exists(get_class($this), $name)) {
property_exists() prend comme 1er argument un nom de classe, PAS un objet.

Ton ode plante juste après de toute manière, sur 'address', ce qui est logique...

A mon avis, tu fais trop compliqué là, tu t'es embrouillé tout seul.
lundi 2 juin 2008 à 23:15:43 | Re : Problème héritage PHP5

gonZoo2

Pu..... naise ! merci :)

Moi tordu !? JaaaaaMaaaaiiiisssss :p

+1 pour phpcs ;)

P.S. : Mais j'ai qu'une 5.2.5 et vivement PHP6


Cette discussion est classée dans : public, class, array, name, return


Répondre à ce message

Sujets en rapport avec ce message

Parse error. besoin de votre aide [ par fairthy ] Bonjour à tous et toutes, bon voilà j'ai un soucis avec un code et je trouve pas l'erreur. j'utiliser dolibarr et je n'arrive plus à avoir accès à me Sauvegarde Mysql en Array [ par mitch73 ] Bonjour à tous et toutes voila j'ai récupéré ce bout de code $db_name = "test"; $link = mysql_con Requete Soap ComplexType [ par joyezp ] Bonjour,Je suis en train de développer une petite application qui se connecte à un service Web dont le fournisseur m'a transmis le wsdl et un exemple Classe mysql : Requete pendant traitement [ par grunkz ] Bonjour,Je travail depuis pas mal de temps avec une classe mysql que j'ai développé et là je suis face a un problème que je n'avais jamais rencontré.S Trie array multidimensionnel suivant critère [ par ricozone3d ] Bonjour à tous, Je cherche à faire un trie de tableau de type : [code=php] $array = array( array('name' => 'bouquin.jpg', 'path' => 'MZ_SC2', 'tag' Update mysql impossible [ par SpaceHam ] J'essaie via mysql (j'utilise le mysqli) d'updater ma table mais sans résultat. Je me suis tout de même basé sur une table utilisateur auquel j'update Erreur sur un array dans une class [ par zemele ] Bonjour, Je viens d'installer mon site le serveur (dev local sous MAMP), et voilà que ma class ne fonctionne plus... Voici le message d'errer : "Ca XML/XSLT dynamique [ par JoJo738 ] Bonjour à tous ^^ Cela fait un bail que je ne suis pas venu sur le forum :p Alors un petit coucou à tout ceux que je connais ;) Sinon, je suis là po Conflit avec if ($file == "xxx") require... [ par PouiF ] Bonjour les amis zéros original.gif Je suis actuellement entrain de faire mon site et cette requete a toujours marché, ce code ce trouve dans requete Doxygene et une class PHP [ par banbanfr ] Bonjour à tous,Voilà je souhaite faire une doc technique via Doxygene d'ailleurs j'y arrive a peu prêt mais des notions me reste encore mystérieuses e


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales