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 :

Pourquoi une classe a la place d'une fonction


Sujet :

Langage PHP

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut Pourquoi une classe a la place d'une fonction
    Bonjour,
    Je debute avec l'OO et je dois m'y mettre a fond.
    En passant par la, j'ai vu ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    abstract class Calendar
    {
       public static function frenchDate($date)
       {
             $temp = explode("-",$date);
             $res = $temp[2]."/".$temp[1]."/".$temp[0];
             return($res);
       }
    }
    echo Calendar::frenchDate($date);
    Dans ce cas, pourquoi je privilègerais une classe alors qu'on peut faire la meme chose avec un fonction standard?
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  2. #2
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Points : 7 503
    Points
    7 503
    Par défaut
    salut,
    dans le cas d'utilisation de class ou de fonction, la différence réside dans l'instance et non dans le fonctionnement. si tu utilise une fonction elle sera charger à chaque appel alors que pour la classe les éléments ne seront chargé qu'a la création de l'objet de plus l'allocation peut être supprimé en supprimant l'objet ce qui n'est pas le but d'une fonction à cela tu ajoute la réutilisation de et la complémentarité de ta classe
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    D'accord, mersci pour ta réponse.
    Mais alors que devient la variable $var instenciée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $var = new className();
    Si je vais sur une autre page?
    alors que pour la classe les éléments ne seront chargé qu'a la création de l'objet
    Es-ce que ca fonction alors comme une session?
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    Je me suis amusé à faire un formulaire en OO, avec ce que j'ai appris ces deux dernier jour.
    Ca te dérange d'y jeter u oeil et d eme dire ce que tu en pense (du côté OO)?
    Ca marche bien..

    mon fichier class.php:
    Code PHP : 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
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
     
    <?php
    class Check{
    	var $error;
     
    	function NoData($name,$val){
    		if(empty($val)) $this->error = '<p>Le champs <b>'.$name.'</b> ne doit pas &ecirc;re vide.</p>';	
    		echo $this->error;
    		$this->error =''; #Vide la variable, dans le cas ou la fonction suivante, est appelé sans que des valeurs sont entrées. Dans ce cas la valeur cette variable sera réaffichée lorque la func suivante sera appelé..
    	}
     
    	# Check that the field contain texactely the amount of caracter
    	function Nb($name,$val,$nb){
    		$val = strlen($val);
    		if($val != $nb) $result = 1;
    			else $result = 0;
     
    		if ($result) $this->error = '<p>Le champs <b>'.$name.'</b> doit contenir exactement '.$nb.' caract&egrave;res.</p>';
    		echo $this->error;
    		$this->error ='';
     
    	}
     
    	#Must have at least $nb caracter
    	function Nb_min($name,$val,$nb){
    		$val = strlen($val);
    		if($val < $nb) $result = 1;
    			else $result = 0;
     
    		if ($result) $this->error = '<p>Le champs <b>'.$name.'</b> doit contenir au moins '.$nb.' caract&egrave;res.</p>';
    		echo $this->error;
    		$this->error ='';
    	}
     
    	#Must not have more $nb than
    	function Nb_max($name,$val,$nb){
    		$val = strlen($val);
    		if($val > $nb) $result = 1;
    			else $result = 0;
     
    		if($result) $this->error = '<p>Le champs <b>'.$name.'</b> ne doit pas contenir plus de '.$nb.' caract&egrave;res.</p>';
    		echo $this->error;
    		$this->error ='';
    	}
     
    	# Check if the field contains only number
    	function NumberNoSpace($name,$val){
    		if(!preg_match("/^[0-9][0-9]*$/",$val)) $this->error = '<p>Le champ <b>'.$name.'</b> doit contenir que des nombres</p>';
     
    		echo $this->error;
    		$this->error ='';
    	}
     
    	#E-mail format
    	function Email($name,$email){
    		##### Chack la validité du format de l'email
     
    		//(http://atranchant.developpez.com/code/validation/)
    		// Le code suivant est la version du 2 mai 2005 qui respecte les RFC 2822 et 1035
    		// http://www.faqs.org/rfcs/rfc2822.html
    		// http://www.faqs.org/rfcs/rfc1035.html
     
    		$atom   = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';   // caractères autorisés avant l'arobase
    		$domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)'; // caractères autorisés après l'arobase (nom de domaine)
     
    		$regex = '/^' . $atom . '+' .   // Une ou plusieurs fois les caractères autorisés avant l'arobase
    		'(\.' . $atom . '+)*' .         // Suivis par zéro point ou plus
    										// séparés par des caractères autorisés avant l'arobase
    		'@' .                           // Suivis d'un arobase
    		'(' . $domain . '{1,63}\.)+' .  // Suivis par 1 à 63 caractères autorisés pour le nom de domaine
    										// séparés par des points
    		$domain . '{2,63}$/i';          // Suivi de 2 à 63 caractères autorisés pour le nom de domaine
     
    		if (preg_match($regex, $email)) $email_format = 0;
    			else $email_format = 1;
     
    		if($email_format) $this->error = '<p>Le format de l\'e-mail "'.$email.'", rempli dans le champs <b>'.$name.'</b>, n\'est pas valide.</p>';
    		echo $this->error;
    		$this->error ='';
    	}
     
    	///CHECK DOMAIN
    	function Domain($name,$val){
     
    		if(ereg("@",$val)){
    			$ls_domaine = str_replace("@","",strstr($val,"@")); 
    		}else{ 
    			$ls_domaine = str_replace("www.","",$val);
    			if(ereg("/",$ls_domaine)){
    				$nb_str = strpos($ls_domaine, "/");
    				$ls_domaine = substr($ls_domaine, 0, $nb_str);
    			}
    		}
     
    		//Inscrivez dans ce tableau les serveurs de noms de votre FAI.
    		$la_serveur_de_nom=array(
    			'ns10.domain.com',   
    			'ns11.domain.com'
    			#'212.27.32.177'     //Adresse IP du serveur de noms tertiaire de mon FAI (Free)
    		);
     
    		//Appel de la bibliothèque PEAR : Net DNS
    		require_once 'Net/DNS.php';
     
    		//Les fonctions ne peuvent pas s'appeler de façon statitique cette fois
    		//On crée donc une instance de classe Net_DNS_Resolver
    		$lo_resolver = new Net_DNS_Resolver();
     
    		//Décommentez cette ligne pour afficher le debuggage
    		//$lo_resolver->debug=1;
     
    		//On précise nos noms de serveurs
    		$lo_resolver->nameservers=$la_serveur_de_nom;
     
    		//On lance une requête, on précise MX pour identifier un éventuel serveur de mail
    		$lo_response = $lo_resolver->query($ls_domaine,'MX');
     
    		//on teste la réponse
    		if ($lo_response) {
    		  foreach ($lo_response->answer as $lo_rr) {
    			//On affiche le résultat pour l'exemple, mais c'est inutile dans l'aboslu
    			$lo_rr->display();
    			#echo "Nom de serveur de mail $ls_domaine valide";
    		  }
    		} else {
    			echo 'Le nom de domaine <b>'.$ls_domaine.'</b> que vous avez rempli dans le champs <b>'.$name.'</b>, est inconnu';
    		}
    	}
     
    }
     
     
     
    class Label{
    	function Label($title,$class){
    		echo '<label class="'.$class.'">'.$title.' :</label><br />';
    	}
    }
     
    class Field extends Check{
    	var $field;
    	var $att;
    	function Field($id,$name,$class,$value){
    		$this->field = '<input id="'.$id.'" name="'.$name.'" class="'.$class.'" value="'.$value.'" />';
    	}
     
    	function Add_attribut($att, $val){
    		$this->att = $att.'="'.$val.'"';
    		$this->field = str_replace('input', 'input '.$this->att,$this->field);
    	}
     
    	function Display(){
    		echo $this->field;
    	}
     
    }
    ?>
    Mon fichier form.php:
    Code PHP : 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
     
    <form id="form1" name="form1" method="post" action="">
    <?php
     
    include('class.php');
     
    //Instancie le label, son tire et sa class
    $firstname_Label = new Label('Label','class');
    //instancie le champd Prénom
    $firstname = new Field('id','name','class',''); 
    //ajout un attribut et sa valeur, au field (optionnel)
    $firstname->Add_Attribut('onChange','alert(\'toto\')');
    //affiche le champs prénom (et ses options)
    $firstname->Display();
     
     
    // Après avoir envoyé les donnée, il suffit de les récupérer et d'utiliser l'intensiation de la class pour les valider ( => class Check)
     
    // Validation
    $firstname->NoData('Prénom',''); //-> Nom du champs à testé (utilisé dans le message d'erreur + la valeur à valider
    $firstname->Nb('Prénom','4','12'); // nom du champs.. + valeur à tester + condition
    $firstname->Nb_min('Prénom','44','4'); //nom du champs + valeur à tester + condition
    $firstname->Nb_max('Prénom','44113ddd','4'); //etc
    $firstname->Email('Prénom','pierre.amey@hello-web');
    $firstname->Domain('Prénom','pierre.amey@hello-web.net'); // Ceci ne fonctionnera que du moment que ce fichier se trouve chez l'hébergeur. En local, ca ne marchera pas, à moins qu'on a un serveur DNS
    $firstname->NumberNoSpace('Prénom','3333333333c5');
    ?>
    </form>
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Je ne suis un crack de la POO, donc je ne ferais pas de critique sur la conception de ta classe classe.php.

    Là où je pense qu'il y a erreur, c'est le fait de coder à la sauce Php4, et non pas Php5.

    A savoir que la communauté Php à cesser tout support de Php4 depuis plus d'1 an maintenant, Php5 est donc actuellement la version la plus stable, etc ... donc recommandée.
    Php4 est tout simplement obsolète, de plus Php6 est sur les rails.

    Vu que tu débute, adopter immédiatement Php5 me semble indispensable.
    La syntaxe a évoluée, surtout pour l'objet d'ailleurs, de même qu'il offre plus de possibilité, comme sur la portée, visibilité, accessibilité et implanté des méthodes dites "magique".
    Bref ... Php5 a fortement évolué.


    Jette un œil sur Les classes et les objets (PHP 5)


    Petit exemple :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Field extends Check {
    	public $field;
    	protected $att;
     
    	public function __construct($id,$name,$class,$value) {
    		... etc ...
    	}
    }
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  6. #6
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    Ha oui, alors là tu fais super bien de me le dire,
    Car j'ai tiré un vieux livre de ma bibliotheque pour apprendre le OO.
    (Ok c'est pas une bonne idée, j'aurais mille fois mieux faire d'aller en acheter un autre qui traine le codage d'aujourd'hui )

    Je vais modifier tout ca, de manière à etre "up to date"!
    ... et acheter un nouveau livre

    Juste encore un truc sur mon code,
    Dans le fichier form.php, on s'entend bien que la partie "Validation" est exécuté après qu'on ait appuyé le bouton "Send" (qui ne vigure pas dans mon code) et que la a été rechargée...
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

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

Discussions similaires

  1. Pourquoi ne définit on pas d’identifiant dans une classe UML?
    Par ninouchou dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 16/02/2014, 21h39
  2. Réponses: 5
    Dernier message: 13/08/2010, 01h31
  3. Réponses: 6
    Dernier message: 21/05/2006, 20h37
  4. [Débutant] Créer une instance avec le nom d'une classe
    Par Quetzalcoatl dans le forum Langage
    Réponses: 7
    Dernier message: 23/01/2006, 20h43
  5. [Applet]utiliser une classe d'un package dans une applet
    Par jeromejanson dans le forum Applets
    Réponses: 1
    Dernier message: 30/06/2005, 08h13

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