Home >Backend Development >PHP Tutorial >Simple usage tutorial of autoLoad automatic loading mechanism

Simple usage tutorial of autoLoad automatic loading mechanism

伊谢尔伦
伊谢尔伦Original
2017-07-01 09:37:011678browse

php's autoload can generally use two methods: autoload and spl methods. These two methods have several different usage methods.

Usage method of autoload 1:
The most commonly used method is to find the class based on the class name. file, and then require_one

The code is as follows:

function autoload($class_name) { 
$path = str_replace('_', '/', $class_name); 
require_once $path . '.php'; 
} 
// 这里会自动加载Http/File/Interface.php 文件 
$a = new Http_File_Interface();

The advantage of this method is that it is simple and easy to use. Of course, there are also disadvantages. The disadvantage is that the class name and file path are forced to be agreed. When the file structure is modified, the class name must be modified.

Autoload usage method 2 (direct mapping method)

The code is as follows:

$map = array( 
'Http_File_Interface' => 'C:/PHP/HTTP/FILE/Interface.php' 
); 
function autoload($class_name) { 
if (isset($map[$class_name])) { 
require_once $map[$class_name]; 
} 
} 
// 这里会自动加载C:/PHP/HTTP/FILE/Interface.php 文件 
$a = new Http_File_Interface();


The advantage of this method is Class names and file paths are only maintained using a mapping, so when the file structure changes, there is no need to modify the class name, only the corresponding items in the mapping need to be modified.

The disadvantage of this method compared to the previous method is that it is very troublesome to maintain this mapping when there are too many files. Maybe at this time you will consider using json or a separate file for maintenance. Maybe you would think of using a framework to maintain or create such a mapping.

spl_autoload

The biggest flaw of autoload is that it cannot have multiple autoload methods

Okay, think about the following scenario, your project references If you have copied someone else's project, your project has an autoload, and someone else's project also has an autoload, so the two autoloads will conflict. The solution is to modify autoload to become one, which is undoubtedly very cumbersome.

Therefore we urgently need to use an autoload call stack, so that the autoload series functions of spl appear. You can use spl_autoload_register to register multiple custom autoload functions

If your PHP version is greater than 5.1, you can use spl_autoload

First understand several functions of spl:
Simple usage tutorial of autoLoad automatic loading mechanism

spl_autoload is the default implementation of _autoload(), it will look for $class_name(.php/.inc) in include_path
Spl_autoload implements automatic loading:

The code is as follows:

/*http.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http"; 
} 
} 
/*test.php*/ 
<?php 
set_include_path("/home/yejianfeng/handcode/"); //这里需要将路径放入include 
spl_autoload("http"); //寻找/home/yejianfeng/handcode/http.php 
$a = new http(); 
$a->callname();

Spl_autoload_register

Register the function into the SPL autoload function stack, look at an example directly:

The code is as follows :

/*http.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http"; 
} 
} 
/*test.php*/ 
<?php 
spl_autoload_register(function($class){ 
if($class == &#39;http&#39;){ 
require_once("/home/yejianfeng/handcode/http.php"); 
} 
}); 

$a = new http(); 
$a->callname();

spl_autoload_call

Call the calling function registered in spl_autoload_register, see the example below

The code is as follows:

/*http.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http"; 
} 
} 
/*http2.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http2"; 
} 
} 
/*test.php*/ 
<?php 
spl_autoload_register(function($class){ 
if($class == &#39;http&#39;){ 
require_once("/home/yejianfeng/handcode/http.php"); 
} 
if($class == &#39;http2&#39;){ 
require_once("/home/yejianfeng/handcode/http2.php"); 
} 
}); 
spl_auto_call(&#39;http2&#39;); 
$a = new http(); 
$a->callname(); //这个时候会输出"this is http2"

spl_auto_registerThis function makes We do not use autoload, it is possible to use custom functions for automatic loading. This method is now commonly used.
Zend’s AutoLoader module uses this method. Excerpt the corresponding code

The code is as follows:

spl_autoload_register(array(CLASS, &#39;autoload&#39;)); 

public static function autoload($class) 
{ 
….. 

}


The above is the detailed content of Simple usage tutorial of autoLoad automatic loading mechanism. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn