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 :

[POO] héritage en PHP5


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2004
    Messages : 12
    Points : 8
    Points
    8
    Par défaut [POO] héritage en PHP5
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
     
    <?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());
    		}
    	}
    }
     
    ?>
    singleton.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    <?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;
    	}
    }
    ?>
    site.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    <?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());
    		}
    	}
    }
     
    ?>
    le script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    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();
    }
    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

    Merci par avance

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2004
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Dailleurs j'ai une question :
    Lorsque j'exécute le script en E_ALL ^ E_STRICT, PHP me fait une remarque si je mets le constructeur de ma classe Singleton en private quand le constructeur de Object est en public, pourquoi ?

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Bonjour,

    Plutôt que d'utiliser la constante __CLASS__, utilise plutôt la fonction get_class, et tu n'auras pas besoin de surcharger.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2004
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    J'ai mis getName en static, je ne peux donc pas utiliser $this mais là, j'hésite

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

Discussions similaires

  1. [POO] Débutant en POO, class mysql php5
    Par ouafouaf dans le forum Langage
    Réponses: 9
    Dernier message: 06/02/2006, 09h21
  2. [POO-Héritage] Appel du constructeur en PHP4.3.2
    Par raoulchatigre dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2005, 15h37
  3. [POO] Performance du PHP5 en POO
    Par Imrryran dans le forum Langage
    Réponses: 13
    Dernier message: 04/10/2005, 13h11
  4. [POO] Classe en PHP5
    Par neptune dans le forum Langage
    Réponses: 5
    Dernier message: 01/09/2005, 17h55
  5. Réponses: 3
    Dernier message: 19/05/2005, 10h46

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