webForumDet fria alternativet

problem med __Autoload()

5 svar · 376 visningar · startad av jme

jmeMedlem sedan maj 20012 237 inlägg
#1

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
#2

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
#3

Dollar-tecknet ska bort.

jmeMedlem sedan maj 20012 237 inlägg
#4

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
#5

Du måste ha autoload i bil.php och inte i Test klassen.

preyMedlem sedan jan. 2002341 inlägg
#6

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");
127 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)