2013-10-08 2 views
0

Je veux modularisation des fonctions, mais cela ne fonctionne pas ...Comment écrire de courtes fonctions PHP qui fonctionnent ensemble

class Review { 
    public function show_report($db, $id){ 
     // Query the DB on $id 
     $x = $this->get_survey($db, 1); 
     $y = $this->get_survey($db, 2); 
     // Use x and y to build a report 
     return $a_report; 
    } 
    private function get_survey($db, $n){ 
     // Query the DB for a certain survey number 
     if($n == 1){ 
      // Perform some logic 
     } else { 
      // Perform some other logic 
     } 
     return $a_survey; 
    } 
}; 

Utilisation de la classe comme ça ..

<?php 
    include_once('api/Review.class.php'); 
    $r = new Review(); 
?> 
<p> 
<?php 
    echo Review::show_report($db, $id); 
?> 
</p> 

PHP lance cette :

Fatal error: Using $this when not in object context in Review.class.php 

Merci pour l'aide!

Répondre

1

Votre motif de conception est bon, vous avez juste une erreur de syntaxe. Vous avez manqué le signe $ sur votre méthode appelle à show_report(), il devrait ressembler à ceci:

public function show_report($db, $id){ 
    // Query the DB on $id 
    $x = $this->get_survey($db, 1); 
    $y = $this->get_survey($db, 2); 
    // Use x and y to build a report 
    return $a_report; 
} 

En outre, le point-virgule à la fin de la classe est inutile.

Enfin, une autre personne a mentionné, vous devez appeler show_report avec des paramètres, comme ceci:

echo $r->show_report($db, $id); 
+0

Maintenant, je reçois 'Erreur fatale: Utiliser $ quand pas dans le contexte de l'objet dans Review.class.php en ligne 42' – broinjc

+1

Pouvez-vous envoyer votre code complet car il y a des variables qui ne sont pas déclarées dans votre exemple de code? – David

+0

J'ai essayé de faire abstraction de certains détails (c'est un long fichier), ce faisant j'ai truqué sur la précision. Ma faute. Bonne suggestion! – broinjc

1

l'intérieur de votre fonction show_report($db, $id) est le pointeur this sans le préfixer $ signe qui provoque l'erreur de syntaxe. De plus, dans la deuxième partie, la fonction n'est pas appelée avec des paramètres. La fonction doit ressembler à ça:

public function show_report($db, $id){ 
    // Query the DB on $id 
    $x = $this->get_survey($db, 1); 
    $y = $this->get_survey($db, 2); 
    // Use x and y to build a report 
    return $a_report; 
} 
+0

C'était l'un de mes problèmes. – broinjc

1
echo $r->show_report; 

Dans cet exemple, vous essayez d'appeler la fonction sans argument. Si c'est vraiment ce que vous faites, ce serait au moins un problème.

Au lieu de cela, appelez la fonction avec des arguments:

echo $r->show_report('foo', 1); 
+0

C'était juste à côté de la cause première. J'appelais show_report dans un contexte statique. – broinjc

+1

Ah, vous n'aviez pas le 'echo Review :: show_report ($ db, $ id);' dans votre message d'origine, ou j'aurais aussi mentionné que oui, vous devez faire 'echo $ r-> show_report ($ db, $ id); 'à la place – andmatand

0

Merci à tous. J'ai corrigé toutes les erreurs de syntaxe, grâce à https://stackoverflow.com/a/19258788/1004107. Ceci est la racine du problème que je ne crois:

<?php 
    include_once('api/Review.class.php'); 
    $r = new Review(); 
?> 
<p> 
<?php 
    echo Review::show_report($db, $id); 
?> 
</p> 

devrait être ...

<?php 
    include_once('api/Review.class.php'); 
    $r = new Review(); 
?> 
<p> 
<?php 
    echo $r->show_report($db, $id); 
?> 
</p> 

Et ceci est fait au contexte statique? Commentez s'il vous plaît.

Questions connexes