Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : fonction Autoload.... [ Archives / Class et Objet ( POO ) ] (Yemanjah)

mercredi 7 décembre 2005 à 23:21:04 | fonction Autoload....

Yemanjah

Bonjour ,

       Après de multiples essais , je désespère et viens demander de l'aide ici.
J'essaye de mettre en place un héritage et à vrai dire je croyais que j'avais reussi.
En tout cas sous Linux .....

J'ai une page index.php qui sert simplement à appeller une série de fonction contenue dans d'autres classes.

Pour cela je crée un objet PageBaseUser qui a pour objectif d'afficher la page d'un utilisateur normal (j'utilise toute une série de fonction de différentes classes pour un accés à la base SQL et l'affichage des différents blocs HTML).

Cette objet hérite de la classe PageBase, classe mère qui rassemble les fonctions communes à PageBaseUser et PageBaseRegister (la page des personnes enregistrés sur le site).

Toutes les classes (PageBase,PageBaseUser,BaseDD, sont écrites dans les pages .php correspondantes), par fainéantise , j'ai donc voulu utiliser la fonction __autoload dans la classe mère (PageBase.php) , qui chargera chacun des pages php dès que je crée l'objet correspondant... et j'ai mis cette auto_load dans la classe mère... comme ça à chaque fois que les filles instancie un objet qu'elle ne connaisse pas elle vont directement demandé à l'auto_load hérité.

Cette configuration fonctionne parfaitement sous Linux...
Mais elle ne marche pas sous Windows (ni sur un autre serveur linux distant chez OVH).

Voila le message d'erreur qu'Apache me retourne :

Fatal error: Cannot instantiate non-existent class: pagebaseuser in c:\program files\easyphp1-7\www\dossier\index.php on line 7

Il me parle d'une classe pagebaseuser , alors qu'à la ligne indiqué j'ai ça :

$PBU = new PageBaseUser("Djoolai- Accueil");

Je me suis donc dit que Windows devait avoir du mal avec les Majuscules.??? j'ai donc remplacé toutes les majuscules des classes (et des noms de fichier) par des minuscules. Sans succés.

Je ne vois pas du tout ou est le problème en vérité....
Est ce que quelqu'un à une idée?

Merci d'avance.


mercredi 7 décembre 2005 à 23:35:31 | Re : fonction Autoload....

J_G

Salut,


Je suis désolé... Mais...
L'affichage sans les majuscule est normal. C'est la fonction get_class() qui renvoit en minuscule... Donc il n'était pas utile de ce tapper la transformation.


enfin bref !

La classe PageBaseUser n'est pas déclarée. C'est tout ! Est-elle déclarée dans un fichier inclus ? OUI, alors inclu ce fichier par
require    ou    require_once (mieux)


A ce moment, si le fichier n'est pas trouvé, il te jetera!

A+


jeudi 8 décembre 2005 à 00:05:52 | Re : fonction Autoload....

Yemanjah

 
Bah ouais mais quel est l'intéret d'une fonction comme autoload,
Si on peut même pas l'utiliser??

Dans ma page PageBase.php il existe la fonction __autoload qui ressemble à ça :

 function __autoload($Nom_Class) {
           require_once('./MisePagePhp/' . $Nom_Class . '.php');
 }

 
Etant donné que je fait déjà un require_once de PageBase.php, normalement à chaque nouvel objet trouvé dans la page index.php (ou dans les classes filles) , si la classe correspondante n'est pas trouvé il est censé la chercher tout seul grace à la fonction autoload.... (en fait je passe par la , paske je crois qu'avec les héritages et tous les objets que j'utilise je vais me taper une grosse liste de require ... différentes à chaque fois... donc si je peux éviter de perdre du temps la dessus ça m'arrange)

Et je répète que ce code marche parfaitement en local sous linux.... et c'est ça que je trouve étonnant....

une autre idée ??

jeudi 8 décembre 2005 à 01:21:29 | Re : fonction Autoload....

FhX

Réponse acceptée !
"Dans ma page PageBase.php il existe la fonction __autoload qui ressemble à ça :

 function __autoload($Nom_Class) {
           require_once('./MisePagePhp/' . $Nom_Class . '.php');
 }"

Rassure moi, dis moi que ta fonction est hors de ta classe !!!
Car une fonction dans une classe s'appele une méthode au passage, attention à ne pas tout confondre !

Car __autoload() ne DOIT PAS s'éxécuter dans une classe, mais bien à l'extérieur !
Je crois que c'est ca ton erreur, ou alors y'a autre chose.
On peut voir les grandes lignes de chacunes de tes classes ? Mere et filles ? Juste les méthodes ca ira largement :)

jeudi 8 décembre 2005 à 01:45:49 | Re : fonction Autoload....

J_G

Moi j'ai du mal à comprendre aussi...

Peut-être cherches-tu à faire un truc comme ça :

function __autoload($Nom_Class) {
       require_once('./MisePagePhp/' . $Nom_Class . '.php');
       eval("\$obj = new {$Nom_Class}();");
       return $obj;
}
// !!! c'est de l'écriture à la volée...

Et puis du coup, tu instancies tes objets ainsi :

$objA = __autoload('classA');


C'est ça ?


jeudi 8 décembre 2005 à 09:54:44 | Re : fonction Autoload....

malalam

Administrateur CodeS-SourceS
Réponse acceptée !
Non non, la méthode magique __autoload () sert bien à éviter les require multiples, si on a 36 classes dans 36 fichiers différents. On évite ainsi les 36 require(). L'instanciation d'un objet ne change pas, de cette manière.

FhX a raison, il faut déjà ne pas mettre __autoload () dans une classe.
Le truc, c'est que le fichier et la classe doivent avoir le même nom...
Avec ça :
 function __autoload($Nom_Class) {
           require_once('./MisePagePhp/' . $Nom_Class . '.php');
 }

Tu vas chercher à partir de la page où tu instancies ta classe, le fichier ./MisePagePhp/nomClasse.php
En gros, tu remontes d'un cran par rapport à la page où tu te trouves, et tu descends dans le répertoire MisePagePhp, et tu cherches la classe = au nom de ta classe.php

Vérifies comment est écrit le fichier contenant ta classe...Vérifie aussi que tu n'aies pas 2 classes dans ce fichier. ET vérifies que tu vas bien chercher au bon endroit...



jeudi 8 décembre 2005 à 11:53:50 | Re : fonction Autoload....

J_G

Réponse acceptée !
Ah ok, je ne suis pas encore passé à PHP5... Avais pas compris que __autoload() est une astuce de PHP5.

jeudi 8 décembre 2005 à 15:15:52 | Re : fonction Autoload....

Yemanjah

Ayééééé ....

Je crois que j'ai trouvé pourkoi autoload ne fonctionnait pas ....

Tout simplement paske la machine que sous Windows et sous le serveur Linux distant, le php est encore en version 4.x  

Bref, bref ... sur ce coup la je mérite de me faire lyncher .... je ne me souvenais plus que la fonction était spécifique PHP5 (merci à J_G ).

Je suppose qu'il n'existe pas de trucs équivalent en php4... donc il me reste plus qu'à faire tout les require

Merci à tous pour ces éclaircissements... même si je ne l'utiliserais pas au final , j'ai bon espoir de mettre ce genre code lorsque la machine distante passera à la nouvelle version.

Merci encore...



jeudi 8 décembre 2005 à 15:54:53 | Re : fonction Autoload....

J_G

Moi je fais come ça :

Je centralise les inclusion dans un fichier (genre include.php).

Dans include, je peux mettre des règle d'inclusion selon le script qui est appelé

if( $_SERVER['SCRIPT_FILENAME']=='truc.php' ) {
    require_once 'pour_truc.inc.php';
}
else {
    require_onc 'pas_pour_truc.inc.php';
}

Ou de a complexité que tu souhaite
(selon les droits de l'utilisateur identifié par connexion...
ex :
'BDD-admin.inc.php', 'BDD-user.inc.php', 'BDD-guest.inc.php'
Ou encore selon l'heure, l'humeur,...)

Tu peux aussi mettre des contrôles 'anti-insertion', 'anti-hack' dans se fichier...
ex : moi j'échappe toute les variables de formulaire d'entré de jeu !

...




Cette discussion est classé dans : fonction, php, classe, classes, pagebaseuser


Répondre à ce message

Sujets en rapport avec ce message

classes et sessions [ par davwart ] Hello all,là je desespere..voial j'ai deux fichiers.fichier1: classe.inc.phpclass User{}?>fichier2: index.phpinclude("classe.inc.php")session_start(); PB de fonction mail() en PHP 4.3.5 sous Linux Redhat 9 [ par enguemeta ] J'ai developpé un petit système d'envoi de message avec la fonction mail() de PHP avec easyphp 1.5 sous windows cette version de easyphp integrait le PHP et DOS [ par nico1214 ] Bonjour, j'utilise la fonction nbtstat de DOS dans mon code PHP afin d'identifier les visiteurs qui se connectent sur l'Intranet.Cependant, il apparai fonction mail [ par BananaTree ] salut.je vais poster une source sur Flashcode, mais j'ai besoin de savoir si le script PHP est valide. (l'extention est en .php)la methode que j'utili Fonction mail(), envoi sans passé par une page php [ par BelphegorCLC ] Salut,Ma question est simple :Comment faire pour envoyer un mail sans passer par un page php ?J'entend par là :par exemple, je voudrai envoyer un mail PHP, fonction COM et les autres appli... [ par Egalon ] Salut, j'ai des difficultés à trouver de la doc (en fr) sur les communications entre PHP et les autres programmes d'un serveur.J'ai php et javascript [ par woodyguy ] Voilà, je me demandais si il était possible de combiner un javascript et du php, je m'explique :j'ai deux images, et j'aimerai utiliser une fonction o fonction ftp_chdir [ par Batric ] Bonjour à tous,Je commence à développer en php depuis quelques semaines et je bloque sur un problème depuis hier : j?ai développé une fonction d?uploa pb avec ma classe [ par windu ] voila, j'utilise 1 classe de connexion (MySQL), classe que j'appelle dasn mon fichier de connexion à la base. tout va bien il me suffit d'inclure ce f Fonction header et fichier .htaccess [ par Bestgamer ] J'ai un problème avec la fonction header dans PHP.Voici le code dans mon fichier .htaccess:ErrorDocument 404 http://localhost/erreur404.phpQuand j'ess


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,577 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.