Rumah php教程 php手册 Zend的AutoLoad机制介绍

Zend的AutoLoad机制介绍

Jun 13, 2016 am 11:57 AM
autoload include lib path set zend memperkenalkan kod salinan mekanisme daripada Contoh

代码示例

复制代码 代码如下:


set_include_path(USVN_LIB_DIR . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace("Zend_");
$autoloader->registerNamespace("USVN_");
$autoloader->registerNamespace("menus_");
$config = new USVN_Config_Ini(USVN_CONFIG_FILE, USVN_CONFIG_SECTION);



过程分析

首先是设置了include_path,include_path就是php中调用include的时候文件寻找的地址
下面就是 require_once 'Zend/Loader/Autoloader.php';

在Zend/Loader/Autoloader.php文件内,读入了Zend/Loader.php, 这个php定义了Zend_Loader这个类,这个类包含了loadClass,loadFile, isReadable(文件是否可读)等函数
实例化Zend_Loader_Autoloader的过程就是调用其构造函数(这里是使用了单例模式)的过程

它的构造函数中的spl_autoload_register(array(__CLASS__, 'autoload'));将Zend_Loader_Autoloader:autoload作为类自动加载函数。
还做了一个操作将_internalAutoloader赋值了自身的_autoload

至于这里面是怎么autoload的等会根据具体例子查看
接下来调用了Zend_Loader_Autoloader:registerNamespace("USVN_"),这个函数做的事就只是在Zend_Loader_AutoLoader的内部属性_namespaces上挂载一个key为USVN_和value为true的值。

看到这个函数就明白其实代码也可以写成

$autoloader->registerNamespace("Zend_")->registerNamespace("USVN_")
或者
$autoloader->registerNamespace(array("Zend_","USVN_"))

好了,现在到调用 USVN_Config_Ini类了
这个类自然走的就是Zend_Loader_Autoloader:autoload("USVN_Config_Ini")
这个函数第一步会去调用getClassAutoloaders获取这个类的AutoLoader。getClassAutoloaders里面增加了对namespaceAutoloader的选择和判断,由于我们很少使用,直接跳过

这里返回的loader打印出来是这样的

复制代码 代码如下:


Array ( [0] => Zend_Loader_Autoloader Object ( [_autoloaders:protected] => Array ( ) [_defaultAutoloader:protected] => Array ( [0] => Zend_Loader [1] => loadClass ) [_fallbackAutoloader:protected] => [_internalAutoloader:protected] => Array *RECURSION* [_namespaces:protected] => Array ( [Zend_] => 1 [ZendX_] => 1 [USVN_] => 1 [menus_] => 1 ) [_namespaceAutoloaders:protected] => Array ( ) [_suppressNotFoundWarnings:protected] => [_zfPath:protected] => ) [1] => _autoload )



其实就是前面设置的_internalAutoloader。

这里就会实际调用Zend_Loader_Autoloader:_autoload ("USVN_Config_Ini")
好了,现在就看到了Zend_Loader_Autoloader:_autoload函数

$callback = $this->getDefaultAutoloader();
这里会获取默认的Autoloader,什么是默认的Autoloader? 看这个类初始定义,实际上是array('Zend_Loader', 'loadClass');
下面自然就调用的是call_user_func($callback, $class);即Zend_Loader:loadClass("USVN_Config_Ini")

首先Zend_Loader已经在AutoLoader.php中被require了
其次我们看看Zend_Loader:loadClass方法,这个方法第一步是检查异常,跳过。第二步是将类分隔,拼凑成$file, 比如USVN/Config/Ini.php,下面就直接调用self::loadFile($file, null, true);

接下来查看self::loadFile,
首先_securityCheck看类名中是否有非法字符,没有,就include了这个$file。这里的$file当然是相对路径,需要拼接上include_path, 记得include_path是在哪里设置的吗?在程序的一开始就设置了!好了,这里就把USVN_Config_Ini这个类读取进来了。
看到这里你就该明白了,如果你自己定义了一个类,并且注册了Namespace,比如USVN,那么你就应该在include_path下面创建一个同名文件夹(大小写必须区分),然后你要引入的相对的文件路径名就是以类名的_做分隔读入的。

到这里AutoLoad机制就阅读完了。
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)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan 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)

Bagaimana untuk menyalin lirik dari QQ Music Bagaimana untuk menyalin lirik Bagaimana untuk menyalin lirik dari QQ Music Bagaimana untuk menyalin lirik Mar 12, 2024 pm 08:22 PM

Kami pengguna seharusnya dapat memahami kepelbagaian beberapa fungsi apabila menggunakan platform ini Kami tahu bahawa lirik beberapa lagu ditulis dengan sangat baik. Kadang-kadang kita mendengarnya beberapa kali dan merasakan maknanya sangat mendalam, jadi jika kita ingin memahami maksudnya, kita ingin menyalinnya secara langsung dan menggunakannya sebagai copywriting masih perlu Anda hanya perlu belajar bagaimana untuk menyalin lirik Saya percaya bahawa semua orang sudah biasa dengan operasi ini, tetapi ia memang agak sukar untuk beroperasi pada telefon bimbit Jadi untuk memberi anda pemahaman yang lebih baik, hari ini editor ada di sini untuk membantu anda. Penjelasan yang baik tentang beberapa pengalaman operasi di atas. ,

Penjelasan terperinci tentang fungsi Set tag dalam teg SQL dinamik MyBatis Penjelasan terperinci tentang fungsi Set tag dalam teg SQL dinamik MyBatis Feb 26, 2024 pm 07:48 PM

Tafsiran teg SQL dinamik MyBatis: Penjelasan terperinci tentang penggunaan teg Set MyBatis ialah rangka kerja lapisan kegigihan yang sangat baik Ia menyediakan banyak teg SQL dinamik dan boleh membina pernyataan operasi pangkalan data secara fleksibel. Antaranya, tag Set ialah tag yang digunakan untuk menjana klausa SET dalam kenyataan UPDATE, yang sangat biasa digunakan dalam operasi kemas kini. Artikel ini akan menerangkan secara terperinci penggunaan teg Set dalam MyBatis dan menunjukkan kefungsiannya melalui contoh kod tertentu. Apakah itu Set tag Set tag digunakan dalam MyBati

Program kod jauh universal GE pada mana-mana peranti Program kod jauh universal GE pada mana-mana peranti Mar 02, 2024 pm 01:58 PM

Jika anda perlu memprogramkan sebarang peranti dari jauh, artikel ini akan membantu anda. Kami akan berkongsi kod jauh universal GE teratas untuk pengaturcaraan sebarang peranti. Apakah alat kawalan jauh GE? GEUniversalRemote ialah alat kawalan jauh yang boleh digunakan untuk mengawal berbilang peranti seperti TV pintar, LG, Vizio, Sony, Blu-ray, DVD, DVR, Roku, AppleTV, pemain media penstriman dan banyak lagi. Alat kawalan jauh GEUniversal datang dalam pelbagai model dengan fungsi dan keupayaan yang berbeza. GEUniversalRemote boleh mengawal sehingga empat peranti. Kod Jauh Universal Teratas untuk Diprogramkan pada Mana-mana Peranti Alat kawalan jauh GE disertakan dengan set kod yang membolehkannya berfungsi dengan peranti yang berbeza. anda boleh

Spesifikasi dan contoh lekukan bahasa Go Spesifikasi dan contoh lekukan bahasa Go Mar 22, 2024 pm 09:33 PM

Spesifikasi lekukan dan contoh bahasa Go adalah bahasa pengaturcaraan yang dibangunkan oleh Google Ia terkenal dengan sintaksnya yang ringkas dan jelas, yang mana spesifikasi lekukan memainkan peranan penting dalam kebolehbacaan dan keindahan kod. Artikel ini akan memperkenalkan spesifikasi lekukan bahasa Go dan menerangkan secara terperinci melalui contoh kod tertentu. Spesifikasi lekukan Dalam bahasa Go, tab digunakan untuk lekukan dan bukannya ruang. Setiap tahap lekukan ialah satu tab, biasanya ditetapkan kepada lebar 4 ruang. Spesifikasi sedemikian menyatukan gaya pengekodan dan membolehkan pasukan bekerjasama untuk menyusun

Fungsi Oracle DECODE penjelasan terperinci dan contoh penggunaan Fungsi Oracle DECODE penjelasan terperinci dan contoh penggunaan Mar 08, 2024 pm 03:51 PM

Fungsi DECODE dalam Oracle ialah ungkapan bersyarat yang sering digunakan untuk mengembalikan hasil yang berbeza berdasarkan keadaan yang berbeza dalam pernyataan pertanyaan. Artikel ini akan memperkenalkan sintaks, penggunaan dan kod sampel bagi fungsi DECODE secara terperinci. 1. sintaks fungsi DECODE DECODE(expr,search1,result1[,search2,result2,...,default]) expr: ungkapan atau medan yang hendak dibandingkan. carian1,

Cara menggunakan Copilot untuk menjana kod Cara menggunakan Copilot untuk menjana kod Mar 23, 2024 am 10:41 AM

Sebagai seorang pengaturcara, saya teruja dengan alatan yang memudahkan pengalaman pengekodan. Dengan bantuan alat kecerdasan buatan, kami boleh menjana kod demo dan membuat pengubahsuaian yang diperlukan mengikut keperluan. Alat Copilot yang baru diperkenalkan dalam Visual Studio Code membolehkan kami mencipta kod yang dijana AI dengan interaksi sembang bahasa semula jadi. Dengan menerangkan kefungsian, kami dapat memahami dengan lebih baik maksud kod sedia ada. Bagaimana untuk menggunakan Copilot untuk menjana kod? Untuk bermula, kami terlebih dahulu perlu mendapatkan sambungan PowerPlatformTools yang terkini. Untuk mencapai ini, anda perlu pergi ke halaman sambungan, cari "PowerPlatformTool" dan klik butang Pasang

Cipta dan jalankan fail '.a' Linux Cipta dan jalankan fail '.a' Linux Mar 20, 2024 pm 04:46 PM

Bekerja dengan fail dalam sistem pengendalian Linux memerlukan penggunaan pelbagai arahan dan teknik yang membolehkan pembangun mencipta dan melaksanakan fail, kod, program, skrip dan perkara lain dengan cekap. Dalam persekitaran Linux, fail dengan sambungan ".a" mempunyai kepentingan yang besar sebagai perpustakaan statik. Perpustakaan ini memainkan peranan penting dalam pembangunan perisian, membolehkan pembangun mengurus dan berkongsi fungsi biasa dengan cekap merentas berbilang program. Untuk pembangunan perisian yang berkesan dalam persekitaran Linux, adalah penting untuk memahami cara mencipta dan menjalankan fail ".a". Artikel ini akan memperkenalkan cara memasang dan mengkonfigurasi fail ".a" Linux secara menyeluruh Mari kita terokai definisi, tujuan, struktur dan kaedah mencipta dan melaksanakan fail ".a" Linux. Apa itu L

Universiti Tsinghua dan sumber terbuka Zhipu AI GLM-4: melancarkan revolusi baharu dalam pemprosesan bahasa semula jadi Universiti Tsinghua dan sumber terbuka Zhipu AI GLM-4: melancarkan revolusi baharu dalam pemprosesan bahasa semula jadi Jun 12, 2024 pm 08:38 PM

Sejak pelancaran ChatGLM-6B pada 14 Mac 2023, model siri GLM telah mendapat perhatian dan pengiktirafan yang meluas. Terutama selepas ChatGLM3-6B menjadi sumber terbuka, pembangun penuh dengan jangkaan untuk model generasi keempat yang dilancarkan oleh Zhipu AI. Jangkaan ini akhirnya telah berpuas hati sepenuhnya dengan keluaran GLM-4-9B. Kelahiran GLM-4-9B Untuk memberikan model kecil (10B dan ke bawah) keupayaan yang lebih berkuasa, pasukan teknikal GLM melancarkan model sumber terbuka siri GLM generasi keempat baharu ini: GLM-4-9B selepas hampir setengah tahun penerokaan. Model ini sangat memampatkan saiz model sambil memastikan ketepatan, dan mempunyai kelajuan inferens yang lebih pantas dan kecekapan yang lebih tinggi. Penerokaan pasukan teknikal GLM tidak

See all articles