Hallo,
ich stehe vor einem Fehler, den ich zwar beheben konnte, ihn aber trotzdem nicht nachvollziehen kann. Ich hoffe, ich kann das jetzt so verständlich erklären, dass man versteht, was ich meine:
Gegeben ist eine Klassen-Ressource Foo mit einer simplen Methode. In einer index.php wird eine weitere Klasse definiert, in der die Klasse Foo eingefügt, deren Methode aufgerufen und das Ergebnis zurückgegeben wird:
Foo.php:
<?php
Class Foo
{
public function hallo()
{
return 'Hallo Welt!';
}
}
?>
Index.php:
<?php
Class Bar
{
public function barFunction()
{
require('Foo.php');
$foo = new Foo;
$test = $foo -> hallo();
return $test;
}
}
$bar = new Bar;
$test_1 = $bar -> barFunction();
var_dump($test_1);
?>
Zurückgegeben wird wie erwartet ein "Hallo Welt!". Führe ich in der index.php jetzt aber die Methode barFunction() ein 2. Mal aus, kommt es zu einer Fehlermeldung.
$test_2 = $bar -> barFunction();
var_dump($test_2);
// Das führt zu "Fatal error: Cannot declare class Foo, because the name is already in use in … on line 3"
Ich habe darauf intuitiv reagiert und die Instanz der Klasse Foo als private Eigenschaft der Klasse Bar gespeichert. Nun funktioniert die doppelte Verwendung von $bar wie von Anfang an gewünscht:
Veränderte index.php:
<?php
Class Bar
{
private $_foo;
public function __construct()
{
require('Foo.php');
$this -> _foo = new Foo;
}
public function barFunction()
{
$test = $this -> _foo -> hallo();
return $test;
}
}
$bar = new Bar;
$test_1 = $bar -> barFunction();
var_dump($test_1);
$test_2 = $bar -> barFunction();
var_dump($test_2);
?>
Wie gesagt, das behebt das Problem. Aber eben nur intuitiv, nicht verständnismäßig. Ich schau mir die Sache jetzt seit 1 Stunde an und denke durch, was der Reihe nach passiert. Aber ich sehe beim 1. Versuch einfach nicht, wo hier die Klasse Foo ein 2. Mal aufgerufen wird. Ich verwende doch die selbe Instanz der Klasse bar, in der Foo ja nur einmalig aufgerufen wird. Wieso wird also der 2. Aufruf bemängelt und wo passiert der? Stehe ich wirklich so auf der Leitung?
Mit lieben Grüßen
Melvin Cowznofski
What – me worry?