sách gpt4 ăn đã đi

Phân tích triển khai tải tự động của nhà soạn nhạc trong khung Laravel

In lại Tác giả: qq735679552 Thời gian cập nhật: 28-09-2022 22:32:09 26 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN này phân tích việc triển khai tính năng tự động tải của trình soạn thảo trong framework Laravel do tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.

Căn cứ.

Tự động tải cho phép bạn tải các tệp lớp được yêu cầu bằng cách tải chúng ra khỏi hộp mà không cần phải viết các câu lệnh require và include rườm rà mỗi lần. Do đó, chỉ những lớp cần thiết mới được tải trong quá trình thực hiện từng yêu cầu và bạn không cần lo lắng về việc tải các lớp mà chỉ cần sử dụng chúng trực tiếp khi cần.

Khung laravel được tải tự động thông qua trình soạn thảo.

Điều này đạt được thông qua đoạn mã sau.

?
1
2
yêu cầu_một_lần __CỦA BẠN__ . '/ nhà soạn nhạc' . '/autoload_real.php' ;
trở lại ComposerAutoloaderInit7b20e4d61e2f88170fbbc44c70d38a1f::getLoader();

Đầu tiên, hãy giải thích hai hàm spl_autoload_register và spl_autoload_unregister.

spl_autoload_register tự động đăng ký một hoặc nhiều hàm tự động tải, thường chạy tự động khi một lớp được khởi tạo.

spl_autoload_unregister thực hiện hoàn toàn ngược lại.

Dán mã thử nghiệm của tôi:

Đây là autoload.php.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
  * Được tạo bởi PhpStorm.
  * Người dùng: Quản trị viên
  * Ngày: 2017/12/7
  * Thời gian: 14:10
  */
không gian tên ứng dụng;
lớp học Tự động tải {
 
  công cộng chức năng __xây dựng()
  {
   $cái này ->tự động tải();
  }
  công cộng chức năng tự động tải(){
   // spl_autoload_register(array('Autoload','ss'),true); sẽ gây ra lỗi nghiêm trọng và phải bao gồm một vùng tên
   spl_tự_động_tải_đăng_ký( mảng ( 'ứng dụng\Tự động tải' , 'ss' ),ĐÚNG VẬY);
  }
  công cộng chức năng ss(){
   tiếng vọng 666;
   ra ;
  }
}

Đây là chỉ mục.php.

?
1
2
3
4
5
6
7
8
9
10
11
12
/**
  * Được tạo bởi PhpStorm.
  * Người dùng: Quản trị viên
  * Ngày: 2017/12/7
  * Thời gian: 14:10
  */
yêu cầu 'tự động tải.php' ;
$tự động tải = mới \app\Tự động tải();
$b = mới B(); // Tự động chạy chức năng autoload lúc này
tiếng vọng 77;
ra ;

Tìm hàm getLoader và phân tích nó:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
công cộng tĩnh chức năng lấy Bộ nạp()
  {
   nếu như (null !== tự:: $bộ nạp ) {
    trở lại bản thân:: $bộ nạp ;
   }
   //Đăng ký hàm tự động nạp, chạy hàm LoadClassLoader khi nạp hoặc khởi tạo lớp
   spl_tự_động_tải_đăng_ký( mảng ( 'ComposerAutoloaderInit7b20e4d61e2f88170fbbc44c70d38a1f' , 'loadClassLoader' ), đúng, đúng);
   bản thân:: $bộ nạp = $bộ nạp = mới \Composer\Autoload\ClassLoader();
   spl_autoload_hủy đăng ký( mảng ( 'ComposerAutoloaderInit7b20e4d61e2f88170fbbc44c70d38a1f' , 'loadClassLoader' ));
/********************* 1**************************** ****************************
   $bản đồ = yêu cầu __CỦA BẠN__ . '/autoload_namespaces.php' ;
   foreach ( $bản đồ BẰNG $không gian tên => $đường dẫn ) {
    $bộ nạp ->đặt( $không gian tên , $đường dẫn );
   }
   $bản đồ = yêu cầu __CỦA BẠN__ . '/autoload_psr4.php' ;
   foreach ( $bản đồ BẰNG $không gian tên => $đường dẫn ) {
    $bộ nạp ->đặtPsr4( $không gian tên , $đường dẫn );
   }
   $classBản đồ = yêu cầu __CỦA BẠN__ . '/autoload_classmap.php' ;
   nếu như ( $classBản đồ ) {
    $bộ nạp ->thêmClassMap( $classBản đồ );
   }
/********************* 1**************************** ****************************
   $bộ nạp ->register(đúng);  $includeFiles = yêu cầu __CỦA BẠN__ . '/autoload_files.php' foreach ( $includeFiles BẰNG $fileIdentifier => $tập tin ) { nhà soạn nhạcYêu cầu7b20e4d61e2f88170fbbc44c70d38a1f( $fileIdentifier , $tập tin ); }  trở lại $bộ nạp ; }}

Phần được bao quanh bởi /***** chủ yếu dành cho ClassLoader.

$prefixesPsr0, $prefixDirsPsr4, $classMap và các thuộc tính khác được gán giá trị. Nghĩa là, một số tệp được định cấu hình sẽ được tải và khi tải hoặc tìm kiếm tệp sau này, chúng sẽ được tìm kiếm từ các tệp cấu hình đã tải. Việc tìm lớp cần tải chủ yếu được thực hiện thông qua chức năng đăng ký. Sau đó phân tích chức năng đăng ký.

?
1
2
3
4
công cộng chức năng đăng ký( $thêm vào trước = sai)
{
  spl_tự_động_tải_đăng_ký( mảng ( $cái này , 'tảiLớp' ), ĐÚNG VẬY, $thêm vào trước );
}

Người ta thấy rằng hàm LoadClass trong lớp này thực sự được đăng ký là hàm tải tự động. Vì vậy, tôi bắt đầu phân tích hàm LoadClass và cuối cùng tìm kiếm các lớp thông qua findFile.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
công cộng chức năng tìmTệp( $lớp học )
{
/// Đặc biệt chú ý đến tham số $class, là tên lớp được tạo dựa trên không gian tên. Vui lòng tham khảo các đặc điểm của không gian tên để biết chi tiết.
  // giải pháp cho PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
  nếu như ( '\\' == $lớp học [0]) {
   $lớp học = chất nền ( $lớp học , 1);
  }
  // tra cứu bản đồ lớp các tìm kiếm đầu tiên từ bản đồ lớp đã tải
  nếu như (không có gì cả) $cái này ->Bản đồ lớp[ $lớp học ])) {
   trở lại $cái này ->Bản đồ lớp[ $lớp học ];
  }
  nếu như ( $cái này ->classMapAuthoritative) {
   trở lại SAI;
  }
// Tìm file từ file cấu hình vừa tải. Đầu tiên tìm kiếm theo quy tắc psr4, sau đó tìm kiếm theo psr0
// Sự khác biệt chính giữa hai quy tắc là cách chúng xử lý dấu gạch dưới.
  $tập tin = $cái này ->tìmTệpVớiPhầnMởRộng( $lớp học , '.php' );
  // Tìm kiếm file Hack nếu chúng ta đang chạy trên HHVM
  nếu như ( $tập tin === null && được định nghĩa( 'Phiên bản HHVM' )) {
   $tập tin = $cái này ->tìmTệpVớiPhầnMởRộng( $lớp học , '.hh' );
  }
  nếu như ( $tập tin === không có) {
   // Hãy nhớ rằng lớp này không tồn tại.
   trở lại $cái này ->Bản đồ lớp[ $lớp học ] = sai;
  }
  trở lại $tập tin ;
}

Tại thời điểm này, việc phân tích chức năng đăng ký được hoàn thành. Sau đó, chúng tôi phân tích mã còn lại của hàm getLoader.

?
1
2
3
4
$includeFiles = yêu cầu __CỦA BẠN__ . '/autoload_files.php' ;
foreach ( $includeFiles BẰNG $fileIdentifier => $tập tin ) {
  nhà soạn nhạcYêu cầu7b20e4d61e2f88170fbbc44c70d38a1f( $fileIdentifier , $tập tin );
}

Mã này thực sự tải tệp autoload_file.php.

Tóm tắt.

Trên đây là toàn bộ nội dung bài viết mong rằng nội dung bài viết có giá trị tham khảo nhất định cho quá trình học tập, làm việc của mọi người. Nếu có thắc mắc gì có thể để lại tin nhắn để trao đổi.

Liên kết gốc: http://blog.csdn.net/qq_16877261/article/details/77707453.

Cuối cùng, bài viết này về phân tích triển khai tải tự động của trình soạn thảo trong khung Laravel kết thúc ở đây. Nếu bạn muốn biết thêm về phân tích triển khai tải tự động của trình soạn thảo trong khung Laravel, vui lòng tìm kiếm các bài viết CFSDN hoặc tiếp tục duyệt qua các bài viết liên quan. mong mọi người sẽ ủng hộ blog của mình trong tương lai nhé! .

26 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress