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 :wink:

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.