Typage d'objet

Discussion dans 'Web, design' créé par Ezekiel !, 20 Mai 2007.

Statut de la discussion:
Fermée.
  1. Offline
    Ezekiel ! Elite
    Merci <3 Shrekju pour les 2 cacas :pfiou:

    Bonjour !
    Je viens de finir mon projet en Java et je me suis remis au PHP. La je me dis, je vais une fois lire entièrement toute les nouveautés de PHP5 niveau POO.
    Je vois (à mon grand étonnement) qu'on peut faire du typage d'objet. Enfin, on peut juste demander qu'un variable soit une instance d'un "array" ou d'un certain type de classe mais les types primitifs ne sont pas pris en compte.
    C'est là que ça peut devenir intéressant (ou pas en fait mais bon :p), pourquoi ne pas créer des classes int, string, float, ... pour les types primitifs un peu à l'instar de ce qui existe en java.
    J'aime vraiment le concept de typage et je trouvais d'ailleurs un peu dommage qu'en PHP ce soit beaucoup plus laxiste...
    Je ne sais ça réellement ce que ça peut apporter en soi à part une clarté du code accrue et au moins on est sur du type de donnée que l'on reçoit en paramètre.
    Un tit exemple de ce que pourrait être une classe int (non testé) :
    Code:
    class int
    {
    private $x;
    function __construct($x)
    { if (preg_match('!^[0-9]*$!', $x)) $this->x = x;
    else echo 'Erreur, parametre invalide !';
    }
    }
    Maintenant ça pourra paraitre totalement inutile à beaucoup à mon avis mais bon... vous en pensez quoi ?
    Ezekiel !, 20 Mai 2007
    #1
  2. Offline
    Ahava Revenant
    Que c'est très très interessant ! :)

    Continue, si tu le fais pour tous je serai surement preneur de ton package :)


    (oui jsuis aussi un java-boy :D)
    Ahava, 20 Mai 2007
    #2
  3. Offline
    Ezekiel ! Elite
    Bon pour le fun j'ai fait ça :
    Code:
    <?php
    $x = int(40);
    echo $x;
    $x->add (int(40));
    echo $x;
    ?>
    qui affiche 4080

    Code:
    <?php
    class int
    {
    	public $x;
    	
    	function __construct($x)
    	{
    		if (preg_match('!^[0-9]*$!', $x))
    		{
    			$this->x = $x;
    		}
    		else 
    		{
    			echo 'Mauvais paramètre.';
    		}
    	}
    	public function add (int $x)
    	{
    		$this->x += $x->x;
    	}
    	function __toString ()
    	{
    		return ''.$this->x;
    	}
    }
    ?>
    La classe

    Code:
    	function int ($x)
    	{
    		return new int($x);
    	}
    La méthode pour faire comme en java :)
    Ezekiel !, 20 Mai 2007
    #3
  4. Offline
    zoheir cvm.mangaleet()
    Et pourquoi ne pas propager/gérer les exceptions au lieu de faire un bête echo ? :dead:

    Faudra aussi gérer le casting et pas seulement l'instanciation, d'ailleurs ton test d'entier n'est pas complet :/
    zoheir, 20 Mai 2007
    #4
  5. Offline
    Ezekiel ! Elite
    lol nan mais j'ai pas dit que c'était parfait hein :D
    C'était juste histoire de voir :)
    Pour les exceptions, j'ai pas assez d'expérience pour faire qqchose de valable même si ça doit pas être bien compliqué.
    Fin bon tout ça c'est juste une idée qui me passait par la tête comme ça :) Faut voir si ça peut avoir une réel utilité !
    Ezekiel !, 20 Mai 2007
    #5
  6. Offline
    Ahava Revenant
    Les exceptions en php, meme chose qu'en Java :)
    Ahava, 21 Mai 2007
    #6
  7. Online
    Tifox ou pas
    Je ne suis pas convaincu, car si ça résout le "problème" du typage, ça rend plus compliqué l'utilisation. Sauf si on sait redéfinir les opérations comme en C++ (mais je n'ai vu ça nulle part).
    Tifox, 21 Mai 2007
    #7
Statut de la discussion:
Fermée.