Masiur Rahman Siddiki
Php

Learn PHP Namespace and Class Loader easy way

Let’s take index.php file first. Now time for the autoload.php file. This is very important file which actually loads the classes dynamically. Let’s setup a class. The file also imports another class.

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