Let’s take index.php file first.
<?php require_once __DIR__ . '/autoload.php'; use MyNamespace\Controllers\RiponController; use MyNamespace\Controllers\MasiurController; $riponController = new RiponController(); $masiurController = new MasiurController(); echo "<pre>"; print_r($riponController->index()); echo "</pre>"; echo "<hr>"; echo "<pre>"; print_r($riponController->serviceFunctionOfRipon()); echo "</pre>"; echo "<hr>"; echo "<pre>"; print_r($riponController->serviceFunctionOfMasiur()); echo "</pre>"; echo "<hr>"; echo $riponController->demoView(); echo "<hr>"; echo "<pre>"; print_r($masiurController->myfunction()); echo "</pre>";
Now time for the autoload.php file. This is very important file which actually loads the classes dynamically.
<?php spl_autoload_register(function ($class) { $prefix = 'MyNamespace\\'; $base_dir = __DIR__ . '/'; $len = strlen($prefix); if (strncmp($prefix, $class, $len) !== 0) { return; } $relative_class = substr($class, $len); $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php'; if (file_exists($file)) { require $file; } });
Let’s setup a class. The file also imports another class.
<?php namespace MyNamespace\Controllers; use MyNamespace\Services\MasiurService; class RiponController { private $riponService; public function __construct() { $this->riponService = new \MyNamespace\Services\RiponService(); } public function index() { return [ 'hello' => 'world from Ripon Controller index', 'details' => 'I am about the details of Ripon Controller. I hope you will like it.' ]; } public function serviceFunctionOfRipon() { return $this->riponService->index(); } public function serviceFunctionOfMasiur() { $masiur = new MasiurService(); return $masiur->index(); } public function demoView() { $myData = $this->riponService->index(); return " <h1>Hello World</h1> <p>This is a demo view</p> <p>It is a demo view from Ripon Controller</p> <p style='color:red'>It is a demo view from Ripon Controller</p> ".date('Y-m-d H:i:s')."<br>".$myData['name']."<br>".$myData['email']."<br>".$myData['phone'] ; } }
This project actually gives an idea of how the classes can be loaded dynamically.
Full source code can be found in this Github Repo: https://github.com/masiur/PHP-Namespace-Learn