Detailed explanation of autoloading of PHP files

小云云
Release: 2023-03-19 21:12:02
Original
1705 people have browsed 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: This article mainly introduces to you the knowledge points related to the automatic loading (autoloading) of PHP files and For detailed usage, friends who need this information can refer to it. I hope it can be helpful to everyone.


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

But once there are too many documents to be called, you have to write one line each time, which doesn’t look good. Is there any way to make PHP documents automatically What about loading?


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

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");
    }
}
Copy after login

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

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;);
});
Copy after login


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

spl_autoload_register(&#39;Custom&#39;);
Copy after login


//使用一个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;]);
Copy after login


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

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

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, which means that it does not call all the functions for you as soon as you run it. Those files, but only which ones you use, such as which files are new, will 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);
}
Copy after login
Related recommendations:

Detailed explanation of Autoloading usage in Zend Framework tutorial

PHP’s PSR-0 standard uses namespace for autoloading

Detailed explanation of Autoloading usage in Zend Framework tutorial

The above is the detailed content of Detailed explanation of autoloading of PHP files. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!