Rumah pembangunan bahagian belakang tutorial php 请离开include_once和require_once_PHP教程

请离开include_once和require_once_PHP教程

Jul 21, 2016 pm 03:00 PM
include once require dan saya ya mahu ini

诚然, 这个理由是对的, 不过, 我今天要说的, 是另外一个的原因.
我们知道, PHP去判断一个文件是否被加载, 是需要得到这个文件的opened_path的, 意思是说, 比如:

复制代码 代码如下:

        set_include_path("/tmp/:/tmp2/");
    include_once("2.php");
    ?>

当PHP看到include_once “2.php”的时候, 他并不知道这个文件的实际路径是什么, 也就无法从已加载的文件列表去判断是否已经加载, 所以在include_once的实现中, 会首先尝试解析这个文件的真实路径(对于普通文件这个解析仅仅类似是检查getcwd和文件路径, 所以如果是相对路径, 一般是不会成功), 如果解析成功, 则查找EG(include_files), 如果存在则说明包含过了, 返回, 否则open这个文件, 从而得到这个文件的opened_path. 比如上面的例子, 这个文件存在于 “/tmp2/2.php”.

然后, 得到了这个opened_path以后, PHP去已加载的文件列表去查找, 是否已经包含, 如果没有包含, 那么就直接compile, 不再需要open file了.

1. 尝试解析文件的绝对路径, 如果能解析成功, 则检查EG(included_files), 存在则返回, 不存在继续
2. 打开文件, 得到文件的打开路径(opened path)
3. 拿opened path去EG(included_files)查找, 是否存在, 如果存在则返回, 不存在继续
4. 编译文件(compile_file)

这个在大多数情况下, 不是问题, 然而问题出在当你使用APC的时候…

在使用APC的时候, APC劫持了compile_file这个编译文件的指针, 从而直接从cache中得到编译结果, 避免了对实际文件的open, 避免了对open的system call.

然而, 当你在代码中使用include_once的时候, 在compile_file之前, PHP已经尝试去open file了, 然后才进入被APC劫持的compile file中, 这样一来, 就会产生一次额外的open操作. 而APC正是为了解决这个问题, 引入了include_once_override, 在include_once_override开启的情况下, APC会劫持PHP的ZEND_INCLUDE_OR_EVAL opcode handler, 通过stat来确定文件的绝对路径, 然后如果发现没有被加载, 就改写opcode为include, 做一个tricky解决方案.

但是, 很可惜, 如我所说, APC的include_once_override实现的一直不好, 会有一些未定义的问题, 比如:

复制代码 代码如下:

        set_include_path("/tmp");
    function a($arg = array()) {
        include_once("b.php");
    }

    a();
    a();
    ?>

然后, 我们的b.php放置在”/tmp/b.php”, 内容如下:
复制代码 代码如下:

          class B {}
    ?>

那么在打开apc.include_once_override的情况下, 连续访问就会得到如下错误:
Fatal error - include() : Cannot redeclare class

排除这些技术因素, 我也一直认为, 我们应该使用include, 而不是include_once, 因为我们完全能做到自己规划, 一个文件只被加载一次. 还可以借助自动加载, 来做到这一点.

你使用include_once,只能证明, 你对自己的代码没信心.
所以, 建议大家, 不要再使用include_once

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/328035.htmlTechArticle诚然, 这个理由是对的, 不过, 我今天要说的, 是另外一个的原因. 我们知道, PHP去判断一个文件是否被加载, 是需要得到这个文件的opened_pat...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

vue3+vite: Bagaimana untuk menyelesaikan ralat apabila menggunakan memerlukan untuk mengimport imej secara dinamik dalam src vue3+vite: Bagaimana untuk menyelesaikan ralat apabila menggunakan memerlukan untuk mengimport imej secara dinamik dalam src May 21, 2023 pm 03:16 PM

Penggunaan vue3+vite:src memerlukan pengimportan imej secara dinamik dan laporan ralat dan penyelesaian vue3+vite secara dinamik Jika vue3 dibangunkan menggunakan skrip taip, akan terdapat mesej ralat untuk keperluan untuk memperkenalkan imej tidak boleh digunakan :require(' .../assets/test.png') diimport kerana typescript tidak menyokong require, jadi import digunakan Berikut ialah cara menyelesaikannya: gunakan awaitimport

Pilihan papan induk ASUS serasi dengan R55600 (termasuk R55600u dan 5600j) Pilihan papan induk ASUS serasi dengan R55600 (termasuk R55600u dan 5600j) Jan 02, 2024 pm 05:32 PM

Papan induk ASUS yang manakah harus dipasangkan dengan R55600 Papan induk ASUS ROGStrixB550-FGaming adalah pilihan yang sangat baik. Ia sangat serasi dengan pemproses Ryzen55600X dan memberikan prestasi dan ciri yang sangat baik. Papan induk ini mempunyai sistem bekalan kuasa yang boleh dipercayai, boleh menyokong overclocking, dan menyediakan banyak slot pengembangan dan port untuk memenuhi keperluan penggunaan harian dan permainan. ROGStrixB550-FGaming juga dilengkapi dengan penyelesaian audio berkualiti tinggi, sambungan rangkaian pantas dan reka bentuk pelesapan haba yang boleh dipercayai untuk memastikan sistem kekal cekap dan stabil. Selain itu, papan induk ini menggunakan gaya ROG yang cantik dan dilengkapi dengan kesan pencahayaan RGB yang cantik, menambah keseronokan visual pada komputer anda. Secara keseluruhannya, ASUS ROGStri

Apakah perbezaan antara php include dan include_once Apakah perbezaan antara php include dan include_once Mar 22, 2023 am 10:38 AM

Apabila kami menulis halaman web menggunakan PHP, kadangkala kami perlu memasukkan kod daripada fail PHP lain dalam fail PHP semasa. Pada masa ini, anda boleh menggunakan fungsi include atau include_once untuk melaksanakan kemasukan fail. Jadi, apakah perbezaan antara include dan include_once?

Mana yang lebih baik, Celeron g4900 atau i36100? (Mana satu lebih baik, Celeron g4900 atau i34170?) Mana yang lebih baik, Celeron g4900 atau i36100? (Mana satu lebih baik, Celeron g4900 atau i34170?) Jan 01, 2024 pm 06:01 PM

Mana yang lebih baik, Celeron g4900 atau i36100 Apabila ia datang kepada dua pemproses Celeron G4900 dan I36100, tidak syak lagi bahawa prestasi I36100 adalah lebih baik. Pemproses Celeron biasanya dianggap sebagai pemproses rendah dan digunakan terutamanya dalam komputer riba bajet. Pemproses I3 digunakan terutamanya untuk pemproses mewah, dan prestasinya sangat baik. Sama ada anda bermain permainan atau menonton video, anda tidak akan mengalami sebarang ketinggalan apabila menggunakan pemproses I3. Oleh itu, jika boleh, cuba beli pemproses Intel I-series, terutamanya untuk komputer meja, supaya anda boleh menikmati keseronokan dunia dalam talian. Bagaimanakah prestasi Celeron G4900T Dari perspektif prestasi, Pentium G4900T berprestasi baik dari segi kekerapan Berbanding dengan versi sebelumnya, prestasi CPU adalah

Apakah kegunaan memerlukan? Apakah kegunaan memerlukan? Nov 27, 2023 am 10:03 AM

memerlukan penggunaan: 1. Memperkenalkan modul: Dalam banyak bahasa pengaturcaraan, require digunakan untuk memperkenalkan modul atau perpustakaan luaran supaya fungsi yang mereka sediakan boleh digunakan dalam atur cara. Contohnya, dalam Ruby, anda boleh menggunakan require untuk memuatkan perpustakaan atau modul pihak ketiga 2. Import kelas atau kaedah: Dalam sesetengah bahasa pengaturcaraan, require digunakan untuk mengimport kelas atau kaedah tertentu supaya ia boleh digunakan dalam fail semasa; ; 3. Melaksanakan tugas tertentu: Dalam beberapa bahasa pengaturcaraan atau rangka kerja, memerlukan digunakan untuk melaksanakan tugas atau fungsi tertentu.

Saya akan pergi ke Tibet dengan beg galas ① Berapa liter beg yang sesuai untuk saya bawa. Saya akan pergi ke Tibet dengan beg galas ① Berapa liter beg yang sesuai untuk saya bawa. Jan 07, 2024 am 10:06 AM

Saya bercadang untuk pergi melancong di Tibet ① Berapa liter beg yang perlu saya bawa? liter atau lebih. Jumlah mendaki adalah kurang daripada 60 liter Sepanjang perjalanan adalah dengan kereta Anda tidak memerlukan beg galas, jika anda benar-benar perlu membawa sesuatu, 25-40 liter Bekalan yang diperlukan untuk perjalanan Tibet: cermin mata hitam, topi matahari, pelindung matahari, krim kulit, balsem bibir, baju lengan panjang, Sweater untuk perjalanan khas atau perjalanan ke Ali, utara Tibet, dan garisan Sichuan-Tibet; disyorkan untuk membawa: beg tidur (perlindungan sejuk), cadar (perlindungan kotor), jaket bawah, kasut kembara atau kasut hiking, selipar, berus gigi, ubat gigi, tuala, kertas rolling , seluar dalam kertas, kain lap pembasmi kuman, lampu suluh, mancis kalis air, pisau , tali. Bolehkah komputer dibawa ke dalam beg hadapan?

'Black Myth: Wukong ' diubah suai secara ajaib untuk mengalahkan Midjourney Alat lukisan AI ini sangat mengagumkan. 'Black Myth: Wukong ' diubah suai secara ajaib untuk mengalahkan Midjourney Alat lukisan AI ini sangat mengagumkan. Aug 23, 2024 pm 09:42 PM

Apabila AI Ideograms bersaing untuk realisme dan rasa artistik, Ideogram telah membuka trek yang rumit: ia boleh menjana teks pada gambar dengan tepat, dan fon serta reka letaknya cantik. Permintaan ini bukan niche Hasilkan poster dan ilustrasi dengan satu klik tanpa menggunakan P-pictures Ia boleh menjimatkan banyak masalah dan sangat sesuai untuk orang biasa yang tidak tahu apa-apa tentang reka bentuk. Kami sebelum ini menulis tentang versi 1.0 Ideogram. Pada 21 Ogos, versi 2.0 datang. Realisme adalah lebih baik, poster lebih direka, dan kemahiran khas teks juga lebih kuat. Anda mungkin tidak pernah mendengarnya Ini adalah produk AI yang dibangunkan oleh bekas pekerja Google Ia mempunyai banyak kekurangan, tetapi papan panjang boleh "mendahului" Midjourney. Arah https://ideogram.ai/A

Mana yang lebih baik, Huntkey s980 atau Bauhaus (Huntkey Apollo atau Lianli Bauhaus o11) Mana yang lebih baik, Huntkey s980 atau Bauhaus (Huntkey Apollo atau Lianli Bauhaus o11) Jan 12, 2024 am 11:06 AM

Mana yang lebih baik, Huntkey s980 atau Bauhaus Huntkey S980 dan Bauhaus (BeQuiet) ialah dua jenama pengeluar bekalan kuasa komputer (PSU) yang berbeza. Mana yang lebih baik untuk dipilih bergantung pada keperluan dan pilihan peribadi anda Ia telah diiktiraf dan dipuji oleh pengguna. Produk mereka digunakan secara meluas dalam komputer peribadi, pelayan, peralatan industri dan bidang lain. Huntkey komited untuk menyediakan produk kuasa berkualiti tinggi dan sentiasa memperkenalkan teknologi baharu dan reka bentuk yang inovatif. Produk mereka menjalani kawalan kualiti dan ujian yang ketat untuk memastikan mereka boleh kuasa peranti dengan stabil dan cekap. Huntkey juga memberi perhatian kepada perlindungan alam sekitar dan pemuliharaan tenaga, dan berusaha untuk mengurangkan kesannya terhadap alam sekitar. Bekalan kuasa mereka mematuhi piawaian antarabangsa dan telah menerima pelbagai pensijilan dan anugerah. Sebagai jenama terkenal

See all articles