Hallo liebe Chat Community,
ich habe bereits eine kleine oo. TestApp entwickelt und habe erfahren, das unter PHP 5.3+ auch Namenskonventionen mit einbezogen werden können. Was das ist, kenne ich bereits aus C++ oder Java.
Ich hab bei mir - bevor ich mit Namespaces gearbeitet habe - alle Klassendateien über eine Config.php eingebunden.
Nun wird in Zukunft auch mein Programm größer anwachsen und möchte nicht immer umständlich alle Klassendateien in eine Config.php schreiben. Dazu habe ich mir mal angesehen, wie Namensräume unter PHP realisiert werden.
Später möchte ich einen Autoloder-Klasse schreiben, die sich um das Einbinden, meiner Klassendateien kümmert.
Aber zunächst, Schritt für Schritt.
Ich möchte erstmal wissen warum ich immer Fehler bekomme, wenn ich mit Namespaces arbeite.
meine bisherige Klassenimplementierung, die sehr gut funktioniert hat!
Ordnerstruktur:
Test
|-[MVC]
|-[Config]
|-[Template]
|-index.php
Test\Config\Config.php
Test\index.php
MVC\Controller\LoginController.php
MVC\Model\LoginModel.php
Wenn ich jetzt in die Klassen, durch den Präfix "namespace", die Namensräume einbinde, kommen ständig, für mich schwer nachvollziehbare Fehlermeldungen. Muss denn in der index.php auch ein Namespace rein, oder gebe ich einen globalen Namespace an? Ich muss doch auch noch mit require_once('%Pfad%'); die Klassendatei einbinden? Wenn ja, dann sehe ich irgendwie keinen Vorteil, in der Einbindung von Namensräumen, wenn ich immer noch die Klassendatei extra einbinden muss.
Ich hoffe sehr, Ihr könnt mir da ein bisschen Licht ins Dunkle bringen.
Mein Ansatz mit folgender Fehlermeldung:
Test\index.php
Test\MVC\Controller\LoginController.php
Ich bekomme die Fehlermessage:
ich habe bereits eine kleine oo. TestApp entwickelt und habe erfahren, das unter PHP 5.3+ auch Namenskonventionen mit einbezogen werden können. Was das ist, kenne ich bereits aus C++ oder Java.
Ich hab bei mir - bevor ich mit Namespaces gearbeitet habe - alle Klassendateien über eine Config.php eingebunden.
Nun wird in Zukunft auch mein Programm größer anwachsen und möchte nicht immer umständlich alle Klassendateien in eine Config.php schreiben. Dazu habe ich mir mal angesehen, wie Namensräume unter PHP realisiert werden.
Später möchte ich einen Autoloder-Klasse schreiben, die sich um das Einbinden, meiner Klassendateien kümmert.
Aber zunächst, Schritt für Schritt.
Ich möchte erstmal wissen warum ich immer Fehler bekomme, wenn ich mit Namespaces arbeite.
meine bisherige Klassenimplementierung, die sehr gut funktioniert hat!
Ordnerstruktur:
Test
|-[MVC]
|-[Config]
|-[Template]
|-index.php
Test\Config\Config.php
PHP:
<?php
include_once('MVC\Controller\LoginController.php');
include_once('MVC\View\PSMView.php');
include_once('MVC\Model\LoginModel.php');
Test\index.php
PHP:
<?php
require_once('Config'.DIRECTORY_SEPARATOR.'Config.php');
$controller = new LoginController(arry_merge($_GET, $_POST));
$controller->run();
MVC\Controller\LoginController.php
PHP:
<?php
class LoginController
{
public function __constructor($request){
$this->request = $request;
}
public function run() {
$model = new LoginModel();
$view = new PSMView();
if(isset($_SESSION['bn_is_logged']) && !empty($SESSION['bn_is_logged']))
echo 'Sie sind Eingelogt!';
else{
$view->setTemplate('LoginTempl');
print $view->loadTemplate();
$model->login(isset($_POST['bn']), isset($_POST['pw']), "k&k-psm-".isset($_POST['db']));
}
if(isset($_POST['logout'])) $model->logout();
}
}
MVC\Model\LoginModel.php
PHP:
<?php
class LoginModel
{
...
}
Wenn ich jetzt in die Klassen, durch den Präfix "namespace", die Namensräume einbinde, kommen ständig, für mich schwer nachvollziehbare Fehlermeldungen. Muss denn in der index.php auch ein Namespace rein, oder gebe ich einen globalen Namespace an? Ich muss doch auch noch mit require_once('%Pfad%'); die Klassendatei einbinden? Wenn ja, dann sehe ich irgendwie keinen Vorteil, in der Einbindung von Namensräumen, wenn ich immer noch die Klassendatei extra einbinden muss.
Ich hoffe sehr, Ihr könnt mir da ein bisschen Licht ins Dunkle bringen.
Mein Ansatz mit folgender Fehlermeldung:
Test\index.php
PHP:
1<?php
2 namespace Test;
3 //require_once('Config'.DIRECTORY_SEPARATOR.'Config.php');
4 require_once('MVC\Controller\LoginController.php');
5 $controller = new LoginController(arry_merge($_GET, $_POST));
6 $controller->run();
Test\MVC\Controller\LoginController.php
PHP:
<?php
namespace Test\MVC\Controller;
require_once('MVC\Model\LoginModel.php');
require_once('MVC\View\PSMView.php');
class LoginController{
...
$model = new LoginModel();
$view = new PSMView();
...
}
Ich bekomme die Fehlermessage:
PHP:
Fatal error: Class 'Test\LoginController' not found in C:\xampp\htdocs\Test\Index.php on line 5
Zuletzt bearbeitet: