2012-07-07 7 views
0

Je n'arrive pas à faire fonctionner ça.Classe non trouvée PHP OOP

<?php 


     function __autoload($classname){ 
      include 'inc/classes/' . $classname . '.class.php'; 
     } 



__autoload("queries") 

$travel = new queries(); 
echo $travel->getPar("price"); 

?> 

Et c'est le fichier inc/classes/queries.class.php.

<? 

class queries { 

     function getPar($par, $table='travel', $type='select') { 

      $result = $db->query(" 
      $type * 
      FROM $table 
      WHERE 
      $par LIKE 
      "); 
      while ($row = $result->fetch_assoc()) { 

       return " 
       $row[$par] 
       "; 
      } 

    } 
} 

?> 

Il renvoie "Requêtes de classe" non trouvées ". Qu'est ce qui ne va pas avec ça?

EDIT:

Erreur fatale: Impossible redéclarer __autoload() (précédemment déclarée /index.php:5) dans index.php sur la ligne 5

Qu'est-ce que l'enfer? Je ne peux pas redéclarer une fonction qui est déjà déclarée dans sa propre ligne, pourquoi?

+0

S'il vous plaît ne pas polluer votre question avec un contenu non-sens pour contourner la restriction "trop ​​de code, pas assez de prose". –

+0

@Michael Eh bien, quoi d'autre à faire? La restriction peut avoir un sens en général mais, dans ce cas, elle a empêché de poser une question a priori valide. –

+0

Je l'ai déjà édité, je n'ai pas de soucis à ce sujet :) – djpredator17

Répondre

1

Au lieu de cette abomination terrible, vous devriez apprendre à utiliser spl_autoload_register():

spl_autoload_register(function($classname){ 

    $filename = 'inc/classes/' . $classname . '.class.php'; 

    if (!file_exists($filename)){ 
     throw new Exception("Could not load class '$classname'.". 
          "File '$filename' was not found !"); 
    } 

    require $filename; 

}); 

Et vous devrait enregistrer l'autoloader dans votre fichier index.php ou bootstrap.php, et le faire une seule fois par chargeur (cet abilit y vous permet de définir plusieurs chargeurs, mais cela est utilisé lorsque vous avez une bibliothèque tierce, qui possède son propre chargeur automatique .. comme dans le cas de SwiftMailer).

P.S. s'il vous plaît apprendre à utiliser déclarations préparées avec MySQLi ou PDO.

Mise à jour

Puisque vous êtes juste en train d'apprendre la POO, voici quelques petites choses qui pourraient vous être utiles:

Conférences:

Livres:

+0

Je viens de commencer avec OOP, les déclarations préparées viendront un peu plus tard, mais vraiment merci pour la suggestion :) – djpredator17

+0

@ djpredator17, ajouté quelques liens qui pourraient vous aider –

+0

Si je pouvais voter jusqu'à votre poste je le ferais au moins deux fois :) ty tellement! – djpredator17

2

Essayez donc (sans chargement automatique de classe):

function __autoload($classname){ 
    include_once 'inc/classes/' . $classname . '.class.php'; 
} 
$travel = new queries(); 

Voir aussi ce link

+0

Je l'ai fait comme vous l'avez suggéré mais nous revenons à la question "requêtes de classe non trouvées". – djpredator17

+0

Je suggère la fonction __autoload, mais vous utilisez la fonction load et faites ainsi dans la fonction __autoload - var_dump ($ classname) - peut-être des problèmes avec les chemins. – yAnTar

+0

Erreur fatale: Impossible de redéclairer les requêtes de classe dans inc/classes/queries.class.php sur la ligne 4 C'est la ligne où je le déclare, pour la première fois (il n'y a pas une seconde fois ...) – djpredator17

0

supprimer cette ligne de votre code __autoload("queries"), vous n'avez pas besoin d'appeler autoloader il sera être appelé par lui sel f chaque fois qu'il rencontre une classe non déclarée et utilise require_once au lieu d'include et debug si les chemins sont corrects ou non.