Detailed explanation of automatic loading php examples of PHP files

jacklove
Release: 2023-04-01 22:14:02
Original
1493 people have browsed it

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

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

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!

Related labels:
php
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!