1.1 Include php file
/**
* This function will auto include all php file
*/
function boot()
{
include 'ClassSameFolder.php';
include './folder5/subfolder/ClassSameNamespace.php';
}
1.2 Alias configs
/**
* This is global function
* will setting aliases config
*
* @return [array] [aliases]
*/
function getAliases()
{
return $aliases = [
'TrueMe' => 'Folder1\Hello\TrueMe',
'Process' => 'Folder2\Phone\Image\Process'
];
}
1.3 Auto load aliases
/**
* Global function
* + This function will be loaded automatically when
* + call spl_autoload_register
*
* @param [string] $className [classname]
* @return avoid
*/
function load($className)
{
echo '<br/> + Step2: Register alias: <b>'
. $className .'</b>';
var_dump(getAliases());
if (isset(getAliases()[$className])) {
echo '<br/> + Step3: Set alias: <b>'
.$className. ' > '. getAliases()[$className]
. '</b><br/><br/>';
class_alias(getAliases()[$className], $className);
}
echo '<br/> + Step3: Can not Set alias: <b>'
.$className. '</b><br/><br/>';
}
2.1 Namespace 1
/**
* Namespace 1
*/
namespace Folder1\Hello;
class TrueMe
{
function __construct()
{
$this->namespace = __NAMESPACE__;
$this->trueMe = TrueMe::class;
}
}
2.2 Namespace 2
/**
* Namespace 2
*/
namespace Folder2\Phone\Image;
class Process
{
protected $range;
function __construct()
{
$this->namespace = __NAMESPACE__;
$this->process = Process::class;
}
}
2.3 Namespace 3
/**
* Namespace 3
*/
namespace Folder3\Sub;
class Name
{
protected $first;
function __construct()
{
$this->namespace = __NAMESPACE__;
$this->process = Name::class;
}
}
3.1 Define namespace 4
/**
* Namespace 4
* + In this namespace is used to test
* + Namespace 1 && namespace 2
*/
namespace Folder4;
echo '<h1>This is namespace: ' . __NAMESPACE__ .'</h1>';
3.2 Case 1: call TrueMe via alias
Code
namespace Folder4;
echo '<h1>This is namespace: ' . __NAMESPACE__ .'</h1>';
use TrueMe; //call alias //case 1
spl_autoload_register("load", true, true);
echo '+ Step1: Call Alias: <b>' . TrueMe::class .'</b>';
$trueMe = new TrueMe;
echo '+ Step4: new class: <b>'. getAliases()[TrueMe::class] .'</b>';
var_dump($trueMe);
--Case 1----------------------------------------
---- + use alias TrueMe--------------------------------------------------
---- + auto call spl_autoload_register > load()------------------------
--------------------------------------------------------------------------------
+ Step1: Call Alias: TrueMe
+ Step2: Register alias: TrueMe
D:\Projects\laravel70\public\indexNoAliasFramework.php:38:
array (size=2)
'TrueMe' => string 'Folder1\Hello\TrueMe' (length=20)
'Process' => string 'Folder2\Phone\Image\Process' (length=27)
+ Step3: Set alias: TrueMe > Folder1\Hello\TrueMe
+ Step4: new class: Folder1\Hello\TrueMe
D:\Projects\laravel70\public\indexNoAliasFramework.php:124:
object(Folder1\Hello\TrueMe)[1]
public 'namespace' => string 'Folder1\Hello' (length=13)
public 'trueMe' => string 'Folder1\Hello\TrueMe' (length=20)
3.3 Case 2: call Process via alias
Code
namespace Folder4;
echo '<h1>This is namespace: ' . __NAMESPACE__ .'</h1>';
use Process; //call alias
spl_autoload_register("load", true, true);
echo '+ Step1: Call Alias: <b>'. Process::class .'</b></br></br>';
$process = new Process;
echo '+ Step4: new class: <b>'. getAliases()[Process::class] .'</b>';
var_dump($process);
--Case 2--------------------------------
---- + use alias Process--------------------------------------------------
---- + auto call spl_autoload_register > load()------------------------
--------------------------------------------------------------------------------
+ Step1: Call Alias: Process
+ Step2: Register alias: Process
D:\Projects\laravel70\public\indexNoAliasFramework.php:38:
array (size=2)
'TrueMe' => string 'Folder1\Hello\TrueMe' (length=20)
'Process' => string 'Folder2\Phone\Image\Process' (length=27)
+ Step3: Set alias: Process > Folder2\Phone\Image\Process
+ Step4: new class: Folder2\Phone\Image\Process
D:\Projects\laravel70\public\indexNoAliasFramework.php:136:
object(Folder2\Phone\Image\Process)[2]
protected 'range' => null
public 'namespace' => string 'Folder2\Phone\Image' (length=19)
public 'process' => string 'Folder2\Phone\Image\Process' (length=27)
3.4 Case 3: call Name direct via use namespace
Code
namespace Folder4;
echo '<h1>This is namespace: ' . __NAMESPACE__ .'</h1>';
use Folder3\Sub\Name; //Call class
spl_autoload_register("load", true, true);
echo '+ Step1: New instance from: <b>'. Name::class . '</b></br></br>';
$name = new Name;
echo '+ Step4: dont register alias: <b>'. Name::class .'</b>';
var_dump($name);
--Case 3--------------------------------
---- + use direct namespace class Name-------------------------------
---- + NOT call spl_autoload_register > load()-----------------------
------------------------------------------------------------------------------
+ Step1: New instance from: Folder3\Sub\Name
+ Step4: dont register alias: Folder3\Sub\Name
D:\Projects\laravel70\public\indexNoAliasFramework.php:147:
object(Folder3\Sub\Name)[3]
protected 'first' => null
public 'namespace' => string 'Folder3\Sub' (length=11)
public 'process' => string 'Folder3\Sub\Name' (length=16)
3.5 Call ClassSameFolder don't use use namespace
code
namespace Folder4;
echo '<h1>This is namespace: ' . __NAMESPACE__ .'</h1>';
/**
* When you use same namespace, you won't need
* use "use" keyword to include that class via namespace
*/
boot();
spl_autoload_register("load", true, true);
echo '+ Step1: New instance from: <b>'. ClassSameFolder::class . '</b></br>';
$classSameFolder = new ClassSameFolder;
echo '+ Step4: dont register alias: <b>'. ClassSameFolder::class .'</b>';
var_dump($classSameFolder);
--Case 4--------------------------------
---- + use direct same folder and namespace-----------------------------
---- + use direct namespace class ClassSameFolder-------------------------
---- + NOT call spl_autoload_register > load()--------------------------
--------------------------------------------------------------------------------
+ Step1: New instance from: Folder4\ClassSameFolder
+ Step4: dont register alias: Folder4\ClassSameFolder
D:\Projects\laravel70\public\indexNoAliasFramework.php:159:
object(Folder4\ClassSameFolder)[4]
protected 'classSameFolder' => string 'Folder4\ClassSameFolder' (length=23)
public 'namespace' => string 'Folder4' (length=7)
3.6 Call ClassSameNamespacedon't use use namespace
code
namespace Folder4;
echo '<h1>This is namespace: ' . __NAMESPACE__ .'</h1>';
/**
* When you use same namespace, you won't need
* use "use" keyword to include that class via namespace
*/
boot();
spl_autoload_register("load", true, true);
echo '+ Step1: New instance from: <b>'. ClassSameNamespace::class . '</b></br></br>';
$ClassSameNamespace = new ClassSameNamespace;
echo '+ Step4: dont register alias: <b>'. ClassSameNamespace::class .'</b>';
var_dump($ClassSameNamespace);
--Case 5--------------------------------
---- + use direct same folder and namespace-----------------------------
---- + use direct namespace class ClassSameNamespace----------------------
---- + NOT call spl_autoload_register > load()--------------------------
--------------------------------------------------------------------------------
+ Step1: New instance from: Folder4\ClassSameNamespace
+ Step4: dont register alias: Folder4\ClassSameNamespace
D:\Projects\laravel70\public\indexNoAliasFramework.php:172:
object(Folder4\ClassSameNamespace)[5]
protected 'ClassSameNamespace' => string 'This calss will same namespace' (length=30)
3.7 Call ClassDontExist via autoload namespace
code
namespace Folder4;
echo '<h1>This is namespace: ' . __NAMESPACE__ .'</h1>';
use ClassDontExist; //call alias
spl_autoload_register("load", true, true);
echo '+ Step1: New instance from: <b>'. ClassDontExist::class . '</b>';
$classDontExist = new ClassDontExist;
var_dump($classDontExist);
echo '<br/>----------------------------------------';
--Case 6--------------------------------
---- + call to namespace: ClassDontExist-------------------------
---- + dont find ClassDontExist alias in spl_autoload_register > load()-----
--------------------------------------------------------------------------------
+ Step1: New instance from: ClassDontExist
+ Step2: Register alias: ClassDontExist
D:\Projects\laravel70\public\indexNoAliasFramework.php:38:
array (size=2)
'TrueMe' => string 'Folder1\Hello\TrueMe' (length=20)
'Process' => string 'Folder2\Phone\Image\Process' (length=27)
+ Step3: Can not Set alias: ClassDontExist
( ! ) Fatal error: Uncaught Error: Class 'ClassDontExist' not found in D:\Projects\laravel70\public\indexNoAliasFramework.php on line 183
( ! ) Error: Class 'ClassDontExist' not found in D:\Projects\laravel70\public\indexNoAliasFramework.php on line 183