OVH Cloud OVH Cloud

Probleme avec __construct

12 réponses
Avatar
Jeremie
Bonjour,

Je viens de créer deux classes, et dans mon programme principal, la création
de l'objet Douchette bugue (une fonction __construct a été définie dans ma
classe Douchette, mais on dirait que rien ne se passe). C'est ma première
appli Orientée Objet, si ovus voyez l'erreur, merci de m'aider.

Ci-dessous, l& classe et le programme principal (les deux étant dans des
répertoires différents):
<?
class Douchette {
private $vitesse;
private $bits;
private $stop;
private $parite;
private $fp; //Pointeur DIO


public function __construct($v, $b, $s, $p) {
echo('Configuration de la douchette en cours');
$this->vitesse=$v;
$this->bits=$b;
$this->stop=$s;
$this->parite=$p;

$this->fp=dio_open('/dev/ttyS0', O_RDWR | O_NOCTTY |
O_NDELAY);
dio_tcsetattr($this->fp, array(
'baud' => $this->vitesse,
'bits' => $this->bits,
'stop' => $this->stop,
'parity' => $this->parite
));
echo('Douchette configurée\n');
}

public function __destruct() {
dio_close($this->fp);
unset($this->fp);
}

public function lire() {
$ligne=dio_read($this->fp);
return $ligne;
}
}
?>


#!/usr/bin/php5-cgi

<?
require_once('../include/connexion.php');
require_once('../classes/douchette.class.php');

echo('Création d\'une connexion à la douchette série...\n');
$dc = new Douchette(1200, 8, 1, 0);
// $dc->__construct(1200, 8, 1, 0);
echo(get_class($dc) . "\n");
while(1) {
$dc->lire();
}
unset($dc);
?>

Merci pour votre aide


Jérémie

10 réponses

1 2
Avatar
Marc Quinton
Jeremie wrote:

Ci-dessous, l& classe et le programme principal (les deux étant dans des
répertoires différents):



tout a l'air OK dans cette belle petite classe, sauf que dio_open() peut
retourner des erreurs qui ne sont pas traitées ici.

tu peux aussi mettre un error_reporting(E_ALL) tout en haut du script.

Avatar
Jeremie Picaude
Jeremie wrote:

Ci-dessous, l& classe et le programme principal (les deux étant dans des
répertoires différents):




tout a l'air OK dans cette belle petite classe, sauf que dio_open() peut
retourner des erreurs qui ne sont pas traitées ici.

tu peux aussi mettre un error_reporting(E_ALL) tout en haut du script.
Je viens de revérifier et tout semble OK en effet, mais à présent le

truc c'est que je reçois des erreurs de timeout, le prog affiche tout ce
qu'il aurait du afficher dans un fonctionnement normal, et le script se
termine... :- Je ne vois pas d'où ça vient.
Ah, aussi, est-ce normal que dans mes méthodes de classe les echo
n'apparaissent pas forcément?


Avatar
Marc

Je viens de revérifier et tout semble OK en effet, mais à présent le
truc c'est que je reçois des erreurs de timeout, le prog affiche tout ce
qu'il aurait du afficher dans un fonctionnement normal, et le script se
termine... :- Je ne vois pas d'où ça vient.


moi non plus a part qu'il n'y aurait pas de lecture sur le port.
tu devrais ajouter des traces dans ton prog (echo ou print)

Ah, aussi, est-ce normal que dans mes méthodes de classe les echo
n'apparaissent pas forcément?


non pas du tout ! un echo ou un print dans une methode n'est rien
d'autre qu'un appel de fonction ordinaire. Et une methode n'est rien
d'autre qu'une fonction ordinaire avec une vue sur $this->*

Avatar
Jeremie
moi non plus a part qu'il n'y aurait pas de lecture sur le port.
tu devrais ajouter des traces dans ton prog (echo ou print)

Justement tout s'affiche une fois que le timeout de 30 secondes est passé,

accompagné d'erreurs...

non pas du tout ! un echo ou un print dans une methode n'est rien
d'autre qu'un appel de fonction ordinaire. Et une methode n'est rien
d'autre qu'une fonction ordinaire avec une vue sur $this->*


Bah a l'intérieur des méthodes de classe ça veut pas. Un pb avec le php5.ii
peut être?

Avatar
Marc Quinton
Jeremie wrote:

Justement tout s'affiche une fois que le timeout de 30 secondes est passé,
accompagné d'erreurs...


* peut-etre faire un flush() a apres chaque trace.
* tu lances le script en version CLI (commande en ligne) ?

Avatar
Jeremie
Marc Quinton wrote:

aire un flush() a apres chaque trace.
* tu lances le script en version CLI (commande en ligne) ?
Oui tout à fait.


Avatar
Antoine Polatouche
Jeremie wrote:
Bah a l'intérieur des méthodes de classe ça veut pas. Un pb avec le php5.ii
peut être?


Ou plus probablement l'inclusion d'un fichier classe qui n'est pas la
version que tu crois charger...

Avatar
Marc Quinton
Antoine Polatouche wrote:

Ou plus probablement l'inclusion d'un fichier classe qui n'est pas la
version que tu crois charger...


oui, sauf que des classes Douchette, y'en a pas une grande quantité
sur les distribution php. Mais l'idée est bonne. En meme temps
si tu redefini une classe qui existe deja, tu risques d'avoir
un message d'erreur.

Avatar
Antoine Polatouche
Marc Quinton wrote:
Antoine Polatouche wrote:

Ou plus probablement l'inclusion d'un fichier classe qui n'est pas la
version que tu crois charger...



oui, sauf que des classes Douchette, y'en a pas une grande quantité
sur les distribution php. Mais l'idée est bonne. En meme temps
si tu redefini une classe qui existe deja, tu risques d'avoir
un message d'erreur.
Ce que je voulais dire, c'est que tu as peut-être plusieurs versions,

plusieurs fichiers à des emplacements différents de *ta* classe, et que
ton include n'inclue pas la version que tu crois. Pour vérifier ça, tu
ajoute une fonction membre version() et tu l'interroge dans le script
qui utilise cette classe... Comme ça au moins tu es sûr de débugger le
script que tu as sous les yeux ;-)


Avatar
Jeremie Picaude
Marc Quinton wrote:

Antoine Polatouche wrote:


Ou plus probablement l'inclusion d'un fichier classe qui n'est pas la
version que tu crois charger...



oui, sauf que des classes Douchette, y'en a pas une grande quantité
sur les distribution php. Mais l'idée est bonne. En meme temps
si tu redefini une classe qui existe deja, tu risques d'avoir
un message d'erreur.


Ce que je voulais dire, c'est que tu as peut-être plusieurs versions,
plusieurs fichiers à des emplacements différents de *ta* classe, et que
ton include n'inclue pas la version que tu crois. Pour vérifier ça, tu
ajoute une fonction membre version() et tu l'interroge dans le script
qui utilise cette classe... Comme ça au moins tu es sûr de débugger le
script que tu as sous les yeux ;-)
Pourquoi avoir une classe à plusieurs endroits?

Non, chez moi toutes les classes sont dans un répertoire dédié, et une
seul classe Douchette existe...



1 2