__autoload($classe) ne fonctionne pas? la classe ne trouve pas d'erreur
Je suis quelques exemples dans le PRO PHP AND JQUERY
livre, mais pour une raison quelconque, les exemples ne fonctionne pas. Même les exemples que j'ai téléchargé à partir de la livres site ne fonctionne pas. Pas sûr de ce qui est mal, parce que j'ai fait exactement comme dans le livre..
/public/Index.php
include_once '../sys/core/init.inc.php';
$cal = new Calendar($dbo, "2010-01-01 12:00:00"); //ERROR Class 'Calendar' not found
/sys/core/init.inc.php
function __autoload($class)
{
$filename = "../sys/class/class." . $class . ".inc.php";
if ( file_exists($filename) )
{
include_once $filename;
}
}
/sys/class/class.calendar.inc.php
class Calendar extends DB_Connect
{
private $_useDate;
private $_m;
private $_y;
private $_daysInMonth;
private $_startDay;
/**
* Create a database containg relevant info
*
* @param object $dbo a database object
* @param string $useDate the date to build calender
*/
public function __construct($dbo=NULL, $useDate=NULL)
{
/*
* Call the parent constructor to check db object
*/
parent::__construct($dbo);
}
}
C'est très ennuyeux, car chaque chapitre dans le livre s'appuie sur ce fondement simple. Ma conjecture est que __autoload()
est le problème, mais je n'ai aucune idée..
alex est correct, mais je voudrais également envisager d'utiliser spl_autoload_register, de sorte que plusieurs de chargement automatique de fonctions peut exister, si ce n'est par vous, par les bibliothèques externes.
pour que
pour que
OriginalL'auteur ganjan | 2011-03-15
Vous devez vous connecter pour publier un commentaire.
La filepaths ne pointent pas vers les bons endroits.
Une meilleure idée serait quelque chose comme ceci dans
Index.php
......et ensuite modifier votre
__autoload()
comme si...Vous devriez
strotlower()
le nom de fichier avant de l'inclure, en tant que votre classe estCalendar
mais votre nom de fichier acalendar
.Pourquoi vous attachez votre code pour une plateforme inutilement, surtout en PHP?
J'ai l'habitude, mais l'auteur du tutoriel pourriez avoir! Je n'ai jamais utiliser Windows.
OriginalL'auteur alex
Tout d'abord, vous êtes découragés de l'aide __autoload() dans le nouveau code comme il PEUT ÊTRE OBSOLÈTE OU SUPPRIMÉE DANS LE FUTUR, selon les doc; au lieu de cela, utilisez spl_autoload_register() comme ceci:
Notez comment nous strtolower () $className. Pour vous assurer que le nom de la classe ( commence généralement avec des majuscules ) cadre avec le nom de fichier ( généralement tous en minuscules ). Dans certains environnement ( en particulier Windows ), ce qui peut ne pas être nécessaire, mais juste pour être sur un côté plus sûr. Par exemple, je n'ai pas dans mon environnement de développement qui est de Windows, mais mon environnement de production( debian ) ne le prendra pas.
Passer ensuite que le nom de la fonction comme argument dans spl_autoload_regsiter. Notez que le nom de la fonction est une chaîne
Si vous voulez attraper l'exception, vous pouvez faire quelque chose comme ceci dans votre fonction personnalisée:
Vous devrez ensuite attraper la levée d'une exception lors de la déclaration de votre classe.
Êtes-vous sûr? Permettez-moi de citer le même lien que vous avez cité: "Attention, Cette fonction est OBSOLÈTE depuis PHP 7.2.0. S'appuyant sur cette fonctionnalité est très déconseillé."
Vous avez raison, cela peut avoir été changé récemment. Merci de souligner ce point.
OriginalL'auteur Stephen Adelakun
J'ai eu ce type d'erreur par l'utilisation
'
remplacé"
,si l'utilisation de"
, il n'y a pas cette erreur:Le droit écrit:
La mauvaise écrit:
OriginalL'auteur aircraft