Home >Backend Development >PHP Tutorial >Detailed explanation of automatic loading php examples of PHP files

Detailed explanation of automatic loading php examples of PHP files

jacklove
jackloveOriginal
2018-06-28 17:28:081570browse

This article mainly introduces the relevant knowledge points and detailed usage of automatic loading (autoloading) of PHP files. Friends who need this can refer to it.

Traditionally, in PHP, when we want to use a class file, we have to require or include it at the head of the document:

<?php
require_once(&#39;../includes/functions.php&#39;);
require_once(&#39;../includes/database.php&#39;);
require_once(&#39;../includes/user.php&#39;);
...

But once there are too many documents to be called, you have to write one line each time, which does not look good. Is there any way to make PHP documents load automatically?

<?php
function __autoload($class_name)
{
  require "./{$class_name}.php";
}

Yes, you can use PHP’s magic function __autoload(). The above example is to automatically load the PHP file in the current directory. Of course, in practice, we are more likely to use it like this:

<?php
function __autoload($class_name)
{
  $name = strtolower($class_name);
  $path = "../includes/{$name}.php";
  
  if(file_exists($path)){
     require_once($path);
    }else{
      die("the file {$class_name} could not be found");
    }
}

That is, we do a certain case processing of the file name, and then check it before require Whether the file exists, if not, display customized information.

Similar usage is often seen in private projects, or in the framework of a single project. Why? Because you can only define one __autoload function, in multi-person development, it is impossible for different developers to use different customized autoloaders, unless everyone has agreed in advance to use one __autoload, and any changes are involved. Version synchronization is troublesome.

Mainly because of this, the good news is that the __autoload function will soon be deprecated in version 7.2 of PHP.

Warning This feature has been DEPRECATED as of PHP 7.2.0. Relying on this feature is highly discouraged.
Then it is replaced by something called spl_autoload_register(), which has the advantage of being customizable Multiple autoloaders.

//使用匿名函数来autoload
spl_autoload_register(function($class_name){
  require_once(&#39;...&#39;);
});

//使用一个全局函数
function Custom()
{
  require_once(&#39;...&#39;);
}

spl_autoload_register(&#39;Custom&#39;);

//使用一个class当中的static方法
class MyCustomAutoloader
{
  static public function myLoader($class_name)
  {
    require_once(&#39;...&#39;);    
  }
}

//传array进来,第一个是class名,第二个是方法名
spl_autoload_register([&#39;MyCustomAutoloader&#39;,&#39;myLoader&#39;]);

//甚至也可以用在实例化的object上
class MyCustomAutoloader
{
  public function myLoader($class_name)
  {
  }
}

$object = new MyCustomAutoloader;
spl_autoload_register([$object,&#39;myLoader&#39;]);

It is worth mentioning that using autoload, whether it is __autoload() or spl_autoload_register(), compared to require or include, the advantage is that the autoload mechanism is lazy loading, that is It is not that all those files are called for you as soon as you run it, but only the ones you use, such as which files are new, will the corresponding files be loaded through the autoload mechanism.

Of course, spl_autoload_register is often used in laravel including various packages, such as here:

/**
 * Prepend the load method to the auto-loader stack.
 *
 * @return void
 */
protected function prependToLoaderStack()
{
  spl_autoload_register([$this, &#39;load&#39;], true, true);
}

Related recommendations:

Detailed explanation of the php skills of using mb_strpos in PHP

Detailed explanation of the method of using zlib extension to achieve GZIP compression output in PHP

PHP implements distributed memcache to set up web cluster session synchronization method detailed explanation

The above is the detailed content of Detailed explanation of automatic loading php examples of PHP files. 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