POO problème __construct

Résolu/Fermé
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 - 9 mai 2009 à 14:50
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 - 9 mai 2009 à 19:35
Bonjour,

Je n'arrive pas à faire fonctionner ce script:

function getIn($error){
		$fId='access';
		$fClass='';
		$fAction="index.php?part=exh&root=access&branch=getIn";
		$fType='none';
		if(!$error) $error='';
		$fTitre='Connexion';
			$fCorps.="\n<label>Artiste <input type='text' maxlength=20 name='artName'/></label>";
			$fCorps.="\n<label>Code <input type='password' name='psw'/></label>";
		$inst=$fId.'°'.$fClass.'°'.$fAction.'°'.$fType;
		$form=new form($inst,$error);
		$form->display();
	}


cette fonction utilise une instance de la classe suivante:

class form {
	public $id;
	public $classe;
	public $action;
	public $type;
	public $error;
	
	function __construct($inst,$error){
		list($id,$class,$action,$type)=explode('°',$inst);
		$this->id=$id;
		$this->classe=$class;
		$this->action=$action;
		$this->type=$type;
		$this->error=$error;
	}
	function display(){
		$fCorps="<div id='".$this->id."' class='".$this->classe."'>";
			$fCorps.="<form method='post' action='".$this->action."'";
			if($this->type=='upload') $fCorps.=" enctype='multipart/form-data'";
			$fCorps.=">";
				$fCorps.="<h3 class='titre'>".$this->titre."</h3>";
				$fCorps.="<h5 class='error'>".$this->error."</h5>";
				$fCorps.="<p>".$this->corps."</p>";
			  if($this->type!='list') $fCorps.="\n\t<input type='image' name='Envoyer' title='Envoi de formulaire' src='send.png'/>";
			$fCorps.="</form>";
		$fCorps.="</div>";
		echo $fCorps;
	}
}


ça ne m'affiche rien au retour. Je pense que j'utilise mal les constructeurs, pourtant je suis les instructions by the book :s

Quelqu'un aurait il une idée? Ca ne me génère pas d'erreur.

Cordialement,

Smoke

EDIT:: à la réflexion ça fait bien une erreur, ça m'interromp l'exécution du script :s mais c'est tout -_-

13 réponses

PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
9 mai 2009 à 15:54
Sans déc ?

Tu trouves plus simple de faire
	function __construct($inst,$titre,$corps,$error){
		list($id,$class,$action,$type)=explode('°',$inst);

que
	function __construct($id,$class,$action,$type,$titre,$corps,$error){


????

Nan .... t'abuses là !

Mise à part qu'il manque toujours

$fCorps = '';

au début dans getIn ça renvoie ce que c'est censé renvoyé : de là à dire que ca fonctionne lol




1
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
9 mai 2009 à 15:41
Bjr

Non la syntaxe __construct est juste (vérifie qd même que le module PHP est bien en version 5 ou sup chez toin provider lol) par contre ta façon de passer des paramètres est bizarre ... ;-)


Pourquoi ne pas faire comme ceci ?

	function __construct($id, $class, $action, $type,$error){ 



Sinon tu fais appel à $this->tilte et $this->corps sans les déclarer au préalable

Et puis il manque $fCorps = ''; au début dans getIn
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
9 mai 2009 à 15:48
Bonjour PhP :)

Merci pour ta réponse, je désespérais^^ (la majorité de mes topics passent inaperçus -_-')

Voici mes version de php sur celeonet: Version de PHP : 4.4.8 / 5.2.5 ça devrait être bon^^ et puis j'ai toujours utilisé la POO, mais pas de façon 'académique' lol

sinon, je ne fais pas comme tu m'as montré parce que ça m'embrouille un peu :p j'ai cherché à simplifier, en tous cas pour mon esprit ;)

Bien vu pour titre et corps, j'les avais zappé :s *pas sérieux ça*

Voici mes modifs:

function getIn($error){
		$fId='access';
		$fClass='';
		$fAction="index.php?part=exh&root=access&branch=getIn";
		$fType='none';
		if(!$error) $error='';
		$fTitre='Connexion';
			$fCorps.="\n<label>Artiste <input type='text' maxlength=20 name='artName'/></label>";
			$fCorps.="\n<label>Code <input type='password' name='psw'/></label>";
		$inst=$fId.'°'.$fClass.'°'.$fAction.'°'.$fType;
		$form=new form($inst,$fTitre,$fCorps,$error);
		$form->display();
	}


et

class form {
	public $id;
	public $classe;
	public $action;
	public $type;
	public $error;
	public $titre;
	public $corps;
	
	function __construct($inst,$titre,$corps,$error){
		list($id,$class,$action,$type)=explode('°',$inst);
		$this->id=$id;
		$this->classe=$class;
		$this->action=$action;
		$this->type=$type;
		$this->error=$error;
		$this->titre=$titre;
		$this->corps=$corps;
	}
	function display(){
		$fCorps="\n\t<div id='".$this->id."' class='".$this->classe."'>";
			$fCorps.="\n\t<form method='post' action='".$this->action."'";
			if($this->type=='upload') $fCorps.=" enctype='multipart/form-data'";
			$fCorps.=">";
				$fCorps.="\n\t\t<h3 class='titre'>".$this->titre."</h3>";
				$fCorps.="\n\t\t<h5 class='error'>".$this->error."</h5>";
				$fCorps.="\n\t\t<p>".$this->corps."</p>";
			  if($this->type!='list') $fCorps.="\n\t<input type='image' name='Envoyer' title='Envoi de formulaire' src='send.png'/>";
			$fCorps.="\n\t</form>";
		$fCorps.="\n\t</div>";
		echo $fCorps;
	}
}


ça ne fonctionne toujours pas:s
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
9 mai 2009 à 15:52
salut,

pour t'aider à débuguer, tant que tu es en développement tu ajoutes "error_reporting(E_ALL);" au début du script principal.

variables inutilisés, warnings, tu auras tout !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
9 mai 2009 à 16:00
Salut,
juste comme ça : je suis sous Free et j’ai moi aussi le choix entre deux versions, une 4.x et une 5.x. Seulement, par défaut, c’est la 4 qui est utilisée…
Pour forcer la v5, il faut renommer les scripts en .php5. Renseigne-toi sur le mécanisme utilisé par ton hébergeur, c’est peut-être pas tout à fait pareil.

Bon courage ;)
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
9 mai 2009 à 16:05
Merci Groarh, je vérifierais ça :D (pas cool quand même cette histoire :s)

PhP, pour le moment (car c'est probablement une appréciation temporaire), je trouve que la lisibilité de mon script est meilleure ainsi, mais les habitudes changent. Ceci dit, j'ai procédé comme tu démontres auparavant, ça m'aidait pas beaucoup; alors je cherche de nouvelles méthodes^^

Pour le $fCorps= manquant j'ai corrigé, et même si c'est peu orthodoxe (une erreur que j'ai laissée passer), j'ai eu l'occasion de tester la fonction getIn avec une autre fonction de formulaire, que j'essais d'améliorer avec cette classe, ça fonctionnait bien^^ :D

Dalida, merci pour le conseil, t'es toujours d'une grande aide^^ je vais voir ce qu'il me sort^^ et je vous tiens au courant
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
9 mai 2009 à 16:21
Comme quoi chacun se façon programmer ;-)

Moi ce qui m'intrigue dans ton approche (indépendamment du passage de tes paramètres) c'est l'existence même de ta fonction getIn() comme si tu essayais d'encapsuler les objets dans des fonctions globales ... bref revenir à une forme de programmation procédurale au lieu d'utiliser réellement les objets.

Mais si tu t'y retrouves comme ça c'est l'essentiel
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
9 mai 2009 à 16:14
Bon, ba ça m'renvoi rien :s j'l'ai mit tout en haut de mon index, tout en haut de mon fichier contenant getin, et tout en haut de celui contenant la classe form, ça ne fonctionne pas:s j'ai essayé error_reporting(-1); et ça ne fonctionne pas non plus:s
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
9 mai 2009 à 16:28
j'ignore comment tu testes mais en faisant comme ceci

...
<body>
<textarea cols="50" rows="40">
<?php getIn('erreur');?>
</textarea>
</body>
</html>


Ca m'affiche :


	<div id='access' class=''>
	<form method='post' action='index.php?part=exh&root=access&branch=getIn'>
		<h3 class='titre'>Connexion</h3>
		<h5 class='error'>erreur</h5>
		<p>
<label>Artiste <input type='text' maxlength=20 name='artName'/></label>
<label>Code <input type='password' name='psw'/></label></p>
	<input type='image' name='Envoyer' title='Envoi de formulaire' src='send.png'/>
	</form>
	</div>

0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
9 mai 2009 à 19:07
j'ai essayé error_reporting(-1); et ça ne fonctionne pas non plus
évidement, tu le sors d'où ton -1 ?

le lien vers le manuel PHP, c'était pas juste pour faire joli...
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58 > Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016
9 mai 2009 à 19:35
j't'aurais pas fait cet affront :D

Astuce

En passant la valeur -1, toutes les erreurs possibles seront affichées, même lors de l'ajout d'autres niveaux et constantes dans les futures versions de PHP. La constantes E_ALL fonctionne de la même façon depuis PHP 6.

voilà d'où je le sors ;) de la doc elle même^^
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
9 mai 2009 à 16:38
tu t'interroges sur l'argument? Il est utilisé lors du traitement des données, si les données sont incomplètes on fait appel à une fonction qui va vérifier l'envoi de chaque input et renvoyer les erreurs adéquates^^ j'ai pas mis cette fonction ici puisqu'elle n'apparait pas encore dans l'exécution du script, elle ne génère donc pas d'erreurs (et elle a très bien fonctionné jusqu'à maintenant, bien qu'incomplète)

Bon en fait j'ai vérifié avec phpversion(), et c'est la version 4.4.8 qui est ressortie. Ce qui expliquerait une partie de mon problème, j'ai donc modifié mon interface pour la énième fois (pas pratique celeonet là dessus) et maintenant j'suis bien en 5.2.5, mais ça ne fonctionne pas pour autant.

:s
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
9 mai 2009 à 16:40
le echo error_reporting(E_ALL); me renvoi 6143 maintenant :s j'ignore encore à quoi ça correspond :(
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
9 mai 2009 à 16:52
j'ai trouvé -_-' *boulet*
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
9 mai 2009 à 16:54
lorsque tu exécutes la fonction error_reporting() PHP te renvoie l'ancien niveau d'erreur
6143 correspond simplement à la constante E_ALL
donc avant l'appel à la fonction tu étais déjà au niveau E_ALL pour le rapport d'erreurs.

Et sans appeler du tout ta fonction getIn est ce que ta page s'affiche ?
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
9 mai 2009 à 17:01
Merci pour le complètement d'informations : ) bien utile tout ça^^

sans appeller cette fonction ma page s'affiche très bien^^
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
9 mai 2009 à 18:05
okay j'ai trouvé (petit suspens...)


j'ai changé le nom de la fonction, et ça a marché. Pourquoi?











[nouveau petit suspens]

Parce que la classe s'appellait getin et la fonction getIn, donc ma théorie, c'est que ces noms sont insensibles à la casse.

Ce qui est une explication assez bizarre, parce que ça ne m'avait pas fait le coup avant. Avec mon autre méthode, qui ne faisait pas de class form en POO à proprement parler, ça fonctionnait sans problème, getin et getIn n'étaient pas considérés comme équivalents. Je ne m'explique pas cet étrange changement :s, en tous cas ça a l'air de marcher maintenant, merci à tous d'avoir eu la patience de chercher avec moi une solution^^ :) et bon week end :)
0