In-depth study of PHP automatic loading mechanism
This article is a detailed analysis and introduction to the phpautomatic loading mechanism. Friends who need it can refer to it
1. Automatic loading in php Method
1. Use require, include, require_once, include_once to load manually.
2. Use autoload for automatic loading
3. Use spl's autoload for automatic loading
Implementation of manual loading:
We can use it when there are few files to be loaded. Be the first to finish. It's easy and no problem to do so.
The code is as follows:
require_once 'a.php'; require_once 'b.php'; require_once 'c.php';
But is this okay when there are many files to be loaded? What should we do when we need to write ten, twenty require_once or more?
At this time we can use the autoload method to simplify our code.
Implementation of autoload loading:
We create an in.php file in the test directory with the following content.
The code is as follows:
echo '我是test下面的in.php<br />';
Then create a loader.php in the test directory with the following content.
The code is as follows:
// 需要重载autoload方法,自定义包含类文件的路径 function autoload($classname) { $class_file = strtolower($classname).".php"; if (file_exists($class_file)){ require_once($class_file); } } @$test = new in(); // 执行到这里会输出 <SPAN style="FONT-FAMILY: Arial, Helvetica, sans-serif">我是test下面的in.php</SPAN>
No problem, successful! We can also create other files for loading, but what should we do when there are many files required and need to be divided into directories?
At this time we need to modify loader.php to use mapping to find the file to be loaded.
The code is as follows:
function autoload($class_name) { $map = array( 'index' => './include/index.php', 'in' => './in.php' ); if (file_exists($map[$class_name]) && isset($map[$class_name])) { require_once $map[$class_name]; } } new index();
The advantage of this method is that the class name and file path are only maintained with a mapping, so when the file structure changes, no modification is required. For the class name, you only need to modify the corresponding item in the mapping.
But autoload can only be used once in a project. When your project references a project of others, there is an autoload in your project, and there is also an autoload in other people's projects, so the two autoloads conflict. The solution is to modify autoload to become one. This is undoubtedly very cumbersome and has a single application scenario.
spl's autoload loading implementation:
spl's autoload series of functions use an autoload call stack. You can use spl_autoload_register to register multiple custom autoload functions , Wide range of application scenarios
•Create in.php in the test directory with the following content
The code is as follows:
<?php class in { public function index() { echo '我是test下面的in.php'; } } ?>
Create loader.php in the test directory with the following content
The code is as follows:
<?php set_include_path("/var/www/test/"); //这里需要将路径放入include spl_autoload("in"); //寻找/var/www/test/in.php $in = new in(); $in->index();
•spl_autoload_register registers the function to SPL autoload In the function stack, modify the code of loader.php
as follows:
function AutoLoad($class){ if($class == 'in'){ require_once("/var/www/test/in.php"); } } spl_autoload_register('AutoLoad'); $a = new in(); $a->index();
•spl_autoload_register registers the application of multiple custom autoload functions
First in the test directory Create the mods folder and create inmod.mod.php with the following content:
The code is as follows:
<?php class inmod { function construct() { echo '我是mods下的in'; } }
Then create the libs folder in the test directory and create inlib.lib The content of .php is as follows:
The code is as follows:
<?php class inlib { function construct() { echo '我是libs下的in'; } }
Finally, create loader.php in the test directory. The content is as follows
The code is as follows:
<?php class Loader { /** * 自动加载类 * @param $class 类名 */ public static function mods($class) { if($class){ set_include_path( "/var/www/test/mods/" ); spl_autoload_extensions( ".mod.php" ); spl_autoload( strtolower($class) ); } } public static function libs($class) { if($class){ set_include_path( "/var/www/test/libs/" ); spl_autoload_extensions( ".lib.php" ); spl_autoload( strtolower($class) ); } } } spl_autoload_register(array('Loader', 'mods')); spl_autoload_register(array('Loader', 'libs')); new inmod();//输出<SPAN style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 14px">我是mods下的in</SPAN> new inlib();//<SPAN style="FONT-FAMILY: Arial, Helvetica, sans-serif">输出</SPAN><SPAN style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 14px">我是libs下的in</SPAN>
The above is the detailed content of In-depth study of PHP automatic loading mechanism. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
