一、引子

laravel这个优雅的框架很值得学习,特地是其中一些优良的设计,平时总会对其中某些性能的实现很好奇,这篇文章好奇的是如下:

二、概念

laravel的根本主动加载性能蕴含了 命名空间、注册主动加载、蕴含文件。

1、命令空间

命令空间是php引入的一种个性,相似文件目录门路,将代码划分成不同空间,类名相互独立互不抵触,用于解决文件引入抵触;命令空间namespace须要申明在文件最后面;命令空间use个别是用来引入类,无奈引入函数,因为主动加载spl_autoload_register是在类未找到时触发,调用函数不触发;两个有命令空间的文件相互引入彼此的类,两头的桥梁是通过"注册主动加载、蕴含文件"。

2、注册主动加载

new对象时,如果找不到类则主动调用全局函数__autoload()(高版本弃用),spl_autoload_register反对多种注册形式、批量注册

3、蕴含文件
require、include、require_once、include_once,网上内容很多请自行搜寻。

三、逻辑导图

四、代码模仿

a.php、b.php、c.php三个文件都在同一目录下,别离命令空间a、命名空间b、桥梁c。

c.php

<?php//__autoload() is Deprecated,采纳spl_autoload_register注册主动加载spl_autoload_register(function($classname){   //$classname会主动加上以后的命名空间,laravel是将命令空间做为目录门路来加载类文件   include_once(explode('\\',$classname)[0].".php" ); });

a.php

<?phpnamespace a;include_once "c.php";class a{   function testA(){      echo "A";    }}/**********************************************************///这里引入buse b\b;$t = new b();echo $t->testB();

b.php

<?phpnamespace  b;  include_once "c.php";class b{  function testB(){    echo "B";  }  }/**********************************************************///这里引入buse a\a;$t = new a();echo $t->testA();