Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Masih tidak tahu tentang memasukkan dan memerlukan dalam PHP. Lihat artikel ini!

Masih tidak tahu tentang memasukkan dan memerlukan dalam PHP. Lihat artikel ini!

青灯夜游
青灯夜游ke hadapan
2021-07-30 17:57:092406semak imbas

Artikel ini akan memberi anda pengenalan terperinci untuk disertakan dan diperlukan dalam PHP, supaya semua orang dapat memahami sepenuhnya sertakan dan perlukan. Mari lihat!

Masih tidak tahu tentang memasukkan dan memerlukan dalam PHP. Lihat artikel ini!

Dalam PHP, terdapat dua cara untuk memasukkan fail luaran iaitu sertakan dan memerlukan. Apakah perbezaan antara mereka?

Jika fail tidak wujud atau ralat berlaku, require menghasilkan ralat tahap E_COMPILE_ERROR dan atur cara berhenti berjalan. Termasuk hanya menjana amaran dan skrip akan terus dilaksanakan.

Ini adalah perbezaan utama antara mereka Dalam aspek lain, memerlukan pada asasnya sama seperti termasuk.

  • Fail yang disertakan terlebih dahulu dicari mengikut laluan yang diberikan oleh parameter Jika tiada direktori (hanya nama fail) diberikan, ia dicari mengikut direktori yang ditentukan oleh include_path. Jika fail tidak ditemui di bawah include_path, include akhirnya akan mencari dalam direktori tempat fail skrip panggilan berada dan direktori kerja semasa
  • Jika laluan ditakrifkan, sama ada laluan mutlak atau laluan relatif ke direktori semasa, include_path akan diabaikan sepenuhnya
  • include_path ditakrifkan dalam php.ini
  • Apabila fail disertakan, kod yang terkandung di dalamnya mewarisi skop pembolehubah baris include. Sejak itu, sebarang pembolehubah yang tersedia dalam fail panggilan pada baris itu juga tersedia dalam fail yang dipanggil. Walau bagaimanapun, semua fungsi dan kelas yang ditakrifkan dalam fail termasuk mempunyai skop global

Selain keperluan dan sertakan biasa, terdapat juga memerlukan_sekali dan sertakan_sekali fungsinya ialah:

  • Jika fail telah dimasukkan, ia tidak akan disertakan lagi. Seperti yang ditunjukkan oleh nama pernyataan ini, hanya masukkan sekali
  • boleh digunakan apabila fail yang sama mungkin disertakan lebih daripada sekali semasa pelaksanaan skrip, dan anda ingin memastikan bahawa ia hanya disertakan sekali untuk mengelakkan definisi semula fungsi , penugasan semula pembolehubah dan isu lain

Mari kita lihat beberapa contoh:

// a.php 不存在
include "a.php"; // warning
// require "a.php"; // error

echo 111; // 使用include时111会输出

// file1.php 中只有一行代码echo 'file1';
require_once 'includeandrequire/file1.php'; // file1
require_once 'includeandrequire/file1.php'; // noting

include_once 'includeandrequire/file1.php'; // noting
include_once 'includeandrequire/file1.php'; // noting

require 'includeandrequire/file1.php'; // file1
require 'includeandrequire/file1.php'; // file1

require 'includeandrequire/file1.php'; // file1
require 'includeandrequire/file1.php'; // file1

Kita dapat melihat bahawa apabila _sekali pertama berjaya dimuatkan, sama ada memerlukan_sekali atau sertakan_sekali , fail ini tidak akan dimuatkan lagi. Tanpa _sekali, fail akan dimuatkan berulang kali.

file2.php

<?php

echo &#39;file2:&#39; . $a, PHP_EOL;
echo &#39;file2:&#39; . $b, PHP_EOL;
$b = "file2";

myFile.php

<?php

$a = &#39;myFile&#39;;
$b = &#39;youFile&#39;;
require_once &#39;includeandrequire/file2.php&#39;;
echo $a, PHP_EOL;
echo $b, PHP_EOL;

// 输出结果
// file2:myFile
// file2:youFile
// myFile
// file2

file3.php
<?php

$c = &#39;file3&#39;;

myFile.php
<?php
function test(){
    require_once &#39;includeandrequire/file3.php&#39;;
    echo $c, PHP_EOL; // file3
}
test();
echo $c, PHP_EOL; // empty

Fail yang disertakan boleh mendapatkan pembolehubah dalam fail induk, dan fail induk juga boleh mendapatkan pembolehubah dalam fail yang mengandungi Walau bagaimanapun, anda perlu memberi perhatian kepada kes khas _sekali.

function foo(){
    require_once &#39;includeandrequire/file3.php&#39;;
    return $c;
}

for($a=1;$a<=5;$a++){
    echo foo(), PHP_EOL;
}

// file3
// empty
// empty
// empty
// empty

Apabila menggunakan _sekali dan memuatkan dalam gelung, hanya kandungan dalam file3.php akan dikeluarkan buat kali pertama. Oleh kerana skop pembolehubah semasa berada dalam kaedah, selepas pemuatan pertama selesai, fail berikutnya tidak akan dimuatkan lagi Pada masa ini, tiada Masih tidak tahu tentang memasukkan dan memerlukan dalam PHP. Lihat artikel ini!c dalam empat gelung seterusnya dan nilai lalainya kosong.

Jika fail dimuatkan menggunakan _sekali dalam dua kaedah pada masa yang sama, adakah kaedah kedua masih memuatkannya?

function test1(){
    require_once &#39;includeandrequire/file1.php&#39;;
}
function test2(){
    require_once &#39;includeandrequire/file1.php&#39;;
}
test1(); // file1
test2(); // empty

Maaf, hanya kaedah pertama akan berjaya dimuatkan, dan kaedah kedua tidak akan dimuatkan lagi.

Jadi, yang manakah lebih baik untuk kita gunakan dalam pembangunan harian?

  • Dari segi kecekapan, _sekali perlu mengesahkan sama ada fail telah dimuatkan Kecekapan akan menjadi lebih rendah, tetapi ia tidak mutlak malah ia tidak dapat dilihat dengan mata kasar. jadi masalah kecekapannya boleh diabaikan. Dan ia membawa lebih banyak faedah daripada tanpa _sekali
  • Berdasarkan prinsip kesilapan terlebih dahulu, adalah lebih baik untuk menggunakan memerlukan_sekali. Kerana selepas melaraskan tahap pelaporan ralat PHP untuk tidak memaparkan amaran, maklumat amaran termasuk tidak akan kelihatan, yang akan menyebabkan ralat tidak dapat diramalkan
  • Apabila digunakan dalam kaedah, _sekali tidak boleh digunakan untuk memuatkan fail, terutamanya Apabila fail ini perlu digunakan dalam berbilang kelas atau kaedah, menggunakan _once boleh menyebabkan fail yang sama tidak dapat dimuatkan dalam kaedah berikutnya
  • Apabila menggunakan memerlukan atau sertakan, sebaiknya jangan gunakan kurungan, walaupun ia Memang boleh digunakan, seperti termasuk ('xxx.php'); Kata kunci tersebut adalah kata kunci ekspresi, bukan kaedah sistem, jadi gunakan sertakan 'xxx.php' secara langsung

serta dan memerlukan fail jika terdapat sebarang pemulangan, anda boleh menggunakan pembolehubah untuk menerima data yang dikembalikan oleh retun Selain itu, mereka juga boleh memuatkan fail bukan PHP dan fail jauh (pemuatan jauh memerlukan memastikan allow_url_include dalam php.ini dihidupkan), seperti:

file4.php
<?php

return &#39;file4&#39;;

file4.txt
可以吧

myFile.php
<?php
$v = require &#39;includeandrequire/file4.php&#39;;
echo $v, PHP_EOL; // file4

include &#39;includeandrequire/file4.txt&#39;;
// 可以吧

include &#39;https://www.baidu.com/index.html&#39;;
// 百度首页的html代码

Di sini kita mempunyai pemahaman yang sangat mendalam termasuk dan memerlukan kedua-dua kaedah pemuatan fail tidak rumit, tetapi mereka juga terdedah kepada beberapa perangkap. perhatian harus diberikan kepadanya. Akhir sekali, berikut adalah bonus kecil, merangkumi kaedah untuk memuatkan semua fail dalam direktori sekaligus:

function include_all_once ($pattern) {
    foreach (glob($pattern) as $file) { 
        require $file;
    }
}

include_all_once(&#39;includeandrequire/*&#39;);
测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/201911/source/%E5%BD%BB%E5%BA%95%E6%90%9E%E6%98%8E%E7%99%BDPHP%E4%B8%AD%E7%9A%84include%E5%92%8Crequire.php

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Masih tidak tahu tentang memasukkan dan memerlukan dalam PHP. Lihat artikel ini!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam