2009-03-01 14 views
0
class hello { 

    var $fname; 
    var $lname; 

    function attrib() { 
    $this->fname = "sarmen"; 
    $this->lname = "dijango"; 
    } 

    function say() { 
    $name = $this->fname.", ".$this->lname; 
    return $name; 
    } 
} 

c'est mon exemple de classe quand j'inclut la classe sur une page et tapez quelque chose comme çama tentative de cours

$ d = new bonjour();
$ d-> say()

rien ne se passe. Qu'est-ce que je fais mal?

merci

+0

Pourriez-vous s'il vous plaît mettre quatre espaces devant votre code afin qu'il soit correctement formaté? Cela aiderait beaucoup. –

+0

Exécutez PHP4 ou PHP5 parce que c'est l'ancienne façon PHP4 et le support de PHP4 est terminé. Voir php.net/oop – raspi

Répondre

4

«dites» renvoie une chaîne. Vous ne faites rien avec ça. Ne devriez-vous pas l'imprimer ou quelque chose?

7

Vous traitez la méthode attrib comme s'il s'agissait d'un constructor, mais vous devez l'appeler __construct pour qu'il se comporte comme tel. * Sinon, vous devez faire ceci:

$myobject = new hello(); // create new object 
$myobject->attrib(); // set the vars 
print $myobject->say(); 

Il est plus fréquent, cependant, de voir quelque chose comme ceci:

$myobject = new hello('my first name', 'my last name'); 
print $myobject->say(); 

Et puis au lieu de la méthode attrib vous auriez quelque chose qui ressemble à ceci:

function __construct($fname, $lname) { 
    $this->fname = $fname; 
    $this->lname = $lname; 
} 

* Sauf si vous utilisez PHP4, auquel cas vous devez nommer votre constructeur le même que le nom de la classe.

+0

Le constructeur est manquant, mais vous devriez obtenir au moins une virgule de toute façon, non? –

+0

Que voulez-vous dire? –

+0

Il veut dire que si vous quittez sa classe en appelant print $ monobjet-say() devrait afficher une seule virgule car $ name sera rempli avec cette virgule. C'est vrai. – Stuart

1

Essayez d'aller:

$var=$d->say(); 
echo $var; 
4

Essayez ceci:

$d = new hello(); 
$d->attrib(); 
print $d->say(); 

Au-delà de cela, vous pouvez faire quelques améliorations telles que cela:

class hello { 

    var $fname; 
    var $lname; 

    public function __construct() { 

     $this->fname = "sarmen"; 
     $this->lname = "dijango"; 

    } 

    public function say() { 

     $name = $this->fname.", ".$this->lname; 

     return $name; 

    } 
} 
+0

ok, merci j'ai compris. –

1

Ils comme vous l'avez maintenant , si vous appelez:

 
$d = new hello(); 
$d->say(); 

Rien ne se passe parce que par exemple() retourne simplement la valeur ... vous devez faire écho ou imprimer cette valeur à la manière suivante:

 
$d = new hello(); 
echo $d->say(); 

Mais cela ne sortie que vous avez attribué une virgule au nom $. Les valeurs de $ this-> fname et $ this-> nom n'ont pas été remplies, donc il n'y a rien à retourner. Mais attendez, vous pourriez dire ... J'ai cette méthode attrib() là-dedans, ne devrait pas remplir ces variables? La réponse est oui, mais vous devez l'appeler. Donc, en utilisant votre exemple qui suit voulez-vous obtenir ce que vous voulez:

 
$d = new hello(); //instantiates the class 
$d->attrib();  //calls attrib() thus assigning those values 
echo $d->say(); //echos out the values returned by say() 

Plus important encore, cependant, est le fait que ce n'est pas vraiment la meilleure façon de faire quelque chose comme ça. Les réponses fournies par Paolo et Jonstjohn vous montrent la meilleure façon de gérer cela et celle de Paolo est la plus flexible car vous pouvez changer les valeurs de prénom et de nom à chaque fois.

Questions connexes