Page 1 sur 1
Pb avec un prog de Typage
Posté : 14 nov. 2005, 22:55
par sacco
Voici mon code
<?php
interface CNombre
{
function ajoute ( CNombre $cl);
}
class CReel implements CNombre
{
$val = 0;
function __CNombre($valn)
{
$this -> val = $valn;
}
function ajoute (CNombre $cl)
{
$this -> val += $cl -> val;
}
class Centier implements CNombre
{
$val = 0;
function __Centier($valn)
{
$this -> val = $valn;
}
function ajoute (CNombre $cl)
{
$this -> val += $cl -> val;
}
}
$entier = new Centier(6);
$reel = new CReel(5.8);
$entier -> ajoute($reel);
$reel -> ajoute($entier);
?>
Mon débogueur me signale un pb avec $val
Merci d'avance pour toute info
Posté : 14 nov. 2005, 23:00
par jeff
salut
peut etre avec
var $val;

Posté : 14 nov. 2005, 23:04
par sacco
J y avait déjà pensé mais m'initialise pas $val à 0 et en plus me génère une erreur sur l'expression class qui suis
Posté : 14 nov. 2005, 23:07
par jeff
pour l'initialisation
var $val=0;
pour le reste 'est quoi comme erreur?
Posté : 14 nov. 2005, 23:11
par sacco
<?php
interface CNombre
{
function ajoute ( CNombre $cl);
}
class CReel implements CNombre
{
var $val=0;
function __CNombre($valn)
{
$this -> val = $valn;
}
function ajoute (CNombre $cl)
{
$this -> val += $cl -> val;
}
class CEntier implements CNombre
{
var $val=0;
function __CEntier($valn)
{
$this -> val = $valn;
}
function ajoute (CNombre $cl)
{
$this -> val += $cl -> val;
}
}
$entier = new Centier(6);
$reel = new CReel(5.8);
$entier -> ajoute($reel);
$reel -> ajoute($entier);
?>
Avec la modif j'ai une erreur sur l'expression class de la ligne "class CEntier "
Posté : 14 nov. 2005, 23:13
par jeff
t'est pret a voir ton erreur
tu a oublié de refermer ta class Creel

Posté : 14 nov. 2005, 23:19
par sacco
Je te remercie beaucoup par contre je ne comprends pas pourquoi je suis obliger de mettre Var $val =0 ; et non $val = 0;
Posté : 14 nov. 2005, 23:28
par jeff
$val n'est pas une variable mais un attribut de ta class et en php4 on les declare comme ceci
var $val;
et en php5
public $val;//equivalent a var $val
//ou
private $val;
Posté : 14 nov. 2005, 23:28
par Cyrano
Pas juste ça: il y a mélange php4 et php5 : l'interface, c'est de l'objet php5: donc le constructeur a un nom qui lui est réservé: __construct() et non le nom de la classe. Ce qui donnerait au final:
<?php
interface CNombre
{
function ajoute ( CNombre $cl);
}
class CReel implements CNombre
{
private $val = 0;
function __construct($valn)
{
$this->val = $valn;
}
function ajoute (CNombre $cl)
{
$this->val += $cl->val;
}
}
class CEntier implements CNombre
{
private $val = 0;
function __construct($valn)
{
$this->val = $valn;
}
function ajoute(CNombre $cl)
{
$this->val += $cl->val;
}
}
$entier = new Centier(6);
$reel = new CReel(5.8);
$entier->ajoute($reel);
$reel->ajoute($entier);
?>
Et si tu veux faire les choses vraiment dans les règles de l'art, il faudrait commenter ton code comme ceci (à toi de mettre les commentaires) :
<?php
/**
* Enter description here...
*
*/
interface CNombre
{
/**
* Enter description here...
*
* @param CNombre $cl
*/
function ajoute ( CNombre $cl);
}
/**
* Enter description here...
*
*/
class CReel implements CNombre
{
/**
* Enter description here...
*
* @var unknown_type
*/
private $val = 0;
/**
* Enter description here...
*
* @param unknown_type $valn
*/
function __construct($valn)
{
$this->val = $valn;
}
/**
* Enter description here...
*
* @param CNombre $cl
*/
function ajoute (CNombre $cl)
{
$this->val += $cl->val;
}
}
/**
* Enter description here...
*
*/
class CEntier implements CNombre
{
/**
* Enter description here...
*
* @var unknown_type
*/
private $val = 0;
/**
* Enter description here...
*
* @param unknown_type $valn
*/
function __construct($valn)
{
$this->val = $valn;
}
/**
* Enter description here...
*
* @param CNombre $cl
*/
function ajoute(CNombre $cl)
{
$this->val += $cl->val;
}
}
$entier = new Centier(6);
$reel = new CReel(5.8);
$entier->ajoute($reel);
$reel->ajoute($entier);
?>
Posté : 14 nov. 2005, 23:32
par sacco
Je vous remercie tous les deux et bonne soirée.