jmeMedlem sedan maj 20012 237 inlägg Hej.
Hur fungerar __autoload() egentligen?
Jag har klassen Test
class Test
{
function __autoload($class)
{
require_once( 'classes' . $class . '.php');
}
// prevent people from creating new instances of this class
function __construct()
{
echo "Hello World";
}
}
Försöker jag nu i en annan php-fil med:
new Test();
så får jag: Fatal error: Class 'Test' not found ...
The_HulkMedlem sedan juni 20031 837 inlägg inkluderar du din fil med classen Test från den filen du anropar Test()?
är detta rätt:
$new Test();
jmeMedlem sedan maj 20012 237 inlägg Grejen med autoload är väl att man inte ska behöva includa filerna?
Låt säga att jag har filen bil.php och i den har jag new Test();
men inget require_once("Test.php");
SkyMedlem sedan maj 2003103 inlägg Du måste ha autoload i bil.php och inte i Test klassen.
preyMedlem sedan jan. 2002341 inlägg såvitt jag förstår så är __autoload enbart en funktion direkt i php, den ska inte alls deklareras i någon klass eller så. Deklarera den högst upp i php-filen som körs först så borde det fungera bra sen.
<?php
function __autoload($class)
{
include($class . '.php');
// Check to see if the include declared the class
if (!class_exists($class, false)) {
trigger_error("Unable to load class: $class", E_USER_WARNING);
}
}
if (class_exists('MyClass')) {
$myclass = new MyClass();
}
?>
Tillägg: funktionen class_exists kör automatiskt funktionen autoload om klassen inte är definierad (man kan gå runt detta och låta bli att autoloada med class_exists(namn, false).
// prevent people from creating new instances of this class
function __construct()
{
echo "Hello World";
}
För att förhindra instanser måste du kasta ett exception, som det ser ut nu kan man skapa hur många instanser som helst. Skriv istället
throw new Exception("Försök inte");