POO problème __construct

Résolu
Smoking bird Messages postés 911 Statut Membre -  
Smoking bird Messages postés 911 Statut Membre -
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 -_-
A voir également:
  • POO problème __construct
  • Happy poo - Télécharger - Arcade

13 réponses

PhP Messages postés 1774 Statut Membre 606
 
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 1774 Statut Membre 606
 
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 911 Statut Membre 58
 
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 7114 Statut Contributeur 923
 
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 706 Statut Membre 185
 
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 911 Statut Membre 58
 
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 1774 Statut Membre 606
 
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 911 Statut Membre 58
 
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 1774 Statut Membre 606
 
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 7114 Statut Contributeur 923
 
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 911 Statut Membre 58 > Dalida Messages postés 7114 Statut Contributeur
 
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 911 Statut Membre 58
 
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 911 Statut Membre 58
 
le echo error_reporting(E_ALL); me renvoi 6143 maintenant :s j'ignore encore à quoi ça correspond :(
0
Smoking bird Messages postés 911 Statut Membre 58
 
j'ai trouvé -_-' *boulet*
0
PhP Messages postés 1774 Statut Membre 606
 
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 911 Statut Membre 58
 
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 911 Statut Membre 58
 
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