Klassen immer mit new anlegen?

ev0lst

Erfahrenes Mitglied
Hallo,

ich arbeite mich gerade wieder in php ein. Nun sind endlich mal die Klassen an der Reihe. Ich habe es soweit auch alles hinbekommen, um mit der Klasse zu arbeiten.

Nur muss ich die Class jedes Mal wenn diese benötigt wird "neu anlegen" ($muh = new classname();) ?

Da ich alle Klassen soweit in einem Class Ordner habe und diese jeweils nach Aufgaben teilen möchte (class.erstelleLogs.php) würde ich gerne auf einen Autoloader zurück greifen. Geht sowas? Sinnvoll? Geht mir nur darum, dass ich nicht jedes Mal die Klasse neu einbinden muss...

Danke
 
Hm ich bin nicht so der OOP Freak, aber new erstellt ja kein Klasse, sondern ein Objekt der angegebenen Klassen. Die Klassen ist so gesehen die Vorlage aus der du mit new eine Instanz erstellst um damit zu arbeiten.
 
new musst du immer machen, auser du willst nur auf methoden zurückgreifen für die es nicht notwenig ist ein objekt zu haben. es gab für PHP5 soweit ich mich errinere ein "auto_include" für Klassenfiles... solang sie genau so heißen wie die klasse selbst. Ich wollte das vor einiger Zeit auch einbinden hatte es aber nicht mehr gefunden und dann gelassen ,)
 
Wenn du Klassen machst die du erstellst, Daten eingibst per SET Funktionen, ausließt per GET dann brauchst du new auf jeden Fall sonst geht es nicht anderst. Du kannst aber 10 Klassen gleichzeitig verwenden unter unterschiedlichen Namen und unterschiedlichen Inhalten.

zB Eine Datenbank-Connection Klasse...
PHP:
$db1 = new datenbank('server','user','pass');
$db2 = new datenbank('server2','user','pass');

Man erstellt mit der gleichen Klasse 2 Objekte und kann dann beide getrennt voneinander verwenden.

Aufrufe ohne new verwendet zu haben sehen so aus:

PHP:
testklasse::umrechnen(2,4);

Kann man verwenden wenn man eh nur eine funktion verwenden möchte die nicht auf Klassenvariablen beeinflusst wird. Und nur einzeln aufgerufen werden soll.

Aber am häufigsten kommen die mit new vor.
 
Ok, vielen Dank für die Infos! Ich denke ich werde es nun mal begreifen :)

Zum Loader...

Müsste ich jeweils für jede Klasse ein include() starten, damit ich damit arbeiten kann?
Ich habe mir hier folgendes überlegt...

PHP:
	function __AutoLoad( $ClassName ) 
	{
		include 'class/class.'.$ClassName.'.php';
	}

Wäre sowas sinnvoll am Anfang der index.php?


Danke
 
Noch etwas...

Ich habe hier ein Script, indem ist es so gelöst worden mit den Logs...

PHP:
	__AutoLoad('files');
	
	$eventMsg = new filemaker();
	$eventMsg->generateLogfile("username","news","login");

Jetzt stelle ich mir die Frage, ob ich das ganze so machen soll, dass das alles in einer Funktion aufgerufen wird... wäre das sinnig?

Die Klasse sieht hier so aus:

PHP:
class fileMaker {
			
	function generateLogfile($user, $moduleName, $statusMsg)
	{
		$logfile = BASEPATH_ACP."/system/logs/logs_".date("W_Y").".txt";
	
		$string .= "User: ".$user." - IP: ".getenv('REMOTE_ADDR')."\n";
		$string .= "Module: ".$moduleName."\n";
		$string .= "Status: ".$statusMsg."\n";
		$string .= "--------------------------------------------\n";
			
		$open = @fopen($logfile, "a");
		$addlog = @fputs($open, $string);
	
		@fclose($open);

	}	
		
}
 
Ein Autoload lässt sich schon realisieren, jedoch musst du sinnvollerweise in jeder klasse die selben funktionsaufrufe haben, oder eine möglichkeit bereitstellen, welche funktion einer autoload-klasse verfügbar ist.

PHP:
class a {
  function tuwas() {}
}

class b {
  function tuwas() {}
}

class autoload {
  function loadClass($name) {
    $myvar = eval("new $name");
    $myvar->tuwas();
  }
}

LG
Andy
 
Zurück