电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

PHP類的自動(dòng)加載與命名空間用法實(shí)例分析

瀏覽:158日期:2022-09-10 08:26:59

本文實(shí)例講述了PHP類的自動(dòng)加載與命名空間用法。分享給大家供大家參考,具體如下:

作為一名合格的程序員,必定會(huì)有一個(gè)從面向過(guò)程編程到面向?qū)ο缶幊痰霓D(zhuǎn)化過(guò)程,在這個(gè)過(guò)程中諸如命名空間,類,繼承,接口,類自動(dòng)加載等等都是需要我們?nèi)フ莆盏?,之前?duì)這些概念都不是很熟悉,只是能夠基礎(chǔ)地使用,在這里系統(tǒng)的記錄一下關(guān)于命名空間與類的自動(dòng)加載知識(shí)。

類的自動(dòng)加載

什么是自動(dòng)加載類?

? ? 從字面意思上就可以大概知道,當(dāng)調(diào)用一個(gè)當(dāng)前頁(yè)面未定義的類的時(shí)候能夠自動(dòng)加載。相信如果你之前了解過(guò)php的魔術(shù)方法的話,肯定不會(huì)對(duì)__autoload這個(gè)魔術(shù)方法感到陌生。php官方手冊(cè)解釋:嘗試加載未定義的類

void __autoload ( string $class )

class即為待加載的類名。php官方手冊(cè)也有比較好的例子,這里引用一下:

./myClass.php

<?php//在這里定義一個(gè)構(gòu)造方法class myClass { public function __construct() { echo 'myClass init’ed successfuly!!!'; }}?>

./index.php

<?php// 將這些代碼寫在我們需要用到的地方function __autoload($classname) { $filename = './'. $classname .'.php'; include_once($filename);}// 實(shí)例化一個(gè)類$obj = new myClass();?>

'在這一行,我們的'./myClass.php'會(huì)被包含進(jìn)來(lái),這個(gè)神奇效果正是我們想要的 你將會(huì)得到'myClass init’ed successfuly!!!'的返回結(jié)果.

所以,如果你調(diào)用了一個(gè)類似于'myClass'的類,文件將會(huì)包含'myClass.php',前提是該文件存在(如果不存在你將會(huì)得到一個(gè)引用錯(cuò)誤),如果你調(diào)用了'Foo','Foo.php'會(huì)被引用,諸如此類...

你在也不需要像下面這樣寫了。'

<?phpinclude_once('./myClass.php');include_once('./myFoo.php');include_once('./myBar.php');$obj = new myClass();$foo = new Foo();$bar = new Bar();?>

雖然說(shuō)這個(gè)魔術(shù)方法確實(shí)很magic,但是他有一個(gè)缺點(diǎn),那就是只能使用一次,當(dāng)需要多條 autoload 函數(shù)的時(shí)候就不行了,所以官方不推薦使用,在后續(xù)版本可能會(huì)被移除。同時(shí)官方也給出了可以替代的函數(shù)spl_autoload_register,將函數(shù)注冊(cè)到SPL __autoload函數(shù)隊(duì)列中。如果該隊(duì)列中的函數(shù)尚未激活,則激活它們。

bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )

直接用例子在說(shuō)明吧,這里與命名空間一起講:

#新建工程test

//首先新建應(yīng)用目錄app,然后在目錄下新建一個(gè)Test文件夾,文件夾下新建兩個(gè)類

test/app/Test/Beta.php

<?phpnamespace appTest;class Beta { public function index() { echo 'appTestBetaindex'; }}

test/app/Test/Test.php

<?phpnamespace appTest;class Test { public function index() { echo 'appTestTestindex'; }}

//新建自動(dòng)加載類test/app/autoload/Loading.php

<?phpnamespace appautoloadclass Loading { public static function autoLoad() { //把 轉(zhuǎn)換層 / , 便于兼容Linux文件找。Windows 下是通用的 $fileName = str_replace(’’, ’/’, DIR . ’’. $className) . ’.php’; if (is_file($fileName)) { require_once $fileName; } else { echo $fileName . ’ is not exist’; die; } }}

//新建應(yīng)用入口文件test/index.php

define(’DIR’, dirname(__FILE__));// /.../test//引入自動(dòng)加載文件require DIR . '/autoload/Loading.php';//自動(dòng)注冊(cè)//這里就是為什么前面寫成靜態(tài)方法的原因spl_autoload_register('autoloadLoading::autoLoad');//然后在下面就可以直接調(diào)用類了,只要在前面加上命名空間$beta = new appTestBeta();$beta->index();//輸出 appTestBetaindexecho 'rn';$test = new appTestTest();$test->index(); //輸出 appTestTestindex命名空間

看到這里相信你應(yīng)該已經(jīng)對(duì)命名空間有了一個(gè)大致的了解,起碼知道怎么用。

什么是命名空間?

從廣義上來(lái)說(shuō),命名空間是一種封裝事物的方法。在很多地方都可以見(jiàn)到這種抽象概念。例如,在操作系統(tǒng)中目錄用來(lái)將相關(guān)文件分組,對(duì)于目錄中的文件來(lái)說(shuō),它就扮演了命名空間的角色。具體舉個(gè)例子,文件 foo.txt 可以同時(shí)在目錄/home/greg 和 /home/other 中存在,但在同一個(gè)目錄中不能存在兩個(gè) foo.txt 文件。另外,在目錄 /home/greg 外訪問(wèn) foo.txt 文件時(shí),我們必須將目錄名以及目錄分隔符放在文件名之前得到 /home/greg/foo.txt。這個(gè)原理應(yīng)用到程序設(shè)計(jì)領(lǐng)域就是命名空間的概念。

所以你可以將他理解為:文件夾。。。

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 济南网站建设|济南建网站|济南网站建设公司【济南腾飞网络】【荐】 | MES系统工业智能终端_生产管理看板/安灯/ESOP/静电监控_讯鹏科技 | 变频器维修公司_plc维修_伺服驱动器维修_工控机维修 - 夫唯科技 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 风电变桨伺服驱动器-风电偏航变桨系统-深圳众城卓越科技有限公司 | 上海物流公司,上海货运公司,上海物流专线-优骐物流公司 | 低温等离子清洗机(双气路进口)-嘉润万丰 | 生物风-销售载体,基因,质粒,ATCC细胞,ATCC菌株等,欢迎购买-百风生物 | 欧盟ce检测认证_reach检测报告_第三方检测中心-深圳市威腾检验技术有限公司 | 京港视通报道-质量走进大江南北-京港视通传媒[北京]有限公司 | LOGO设计_品牌设计_VI设计 - 特创易 | 沉降天平_沉降粒度仪_液体比重仪-上海方瑞仪器有限公司 | 柴油发电机组_柴油发电机_发电机组价格-江苏凯晨电力设备有限公司 | 影像测量仪_三坐标测量机_一键式二次元_全自动影像测量仪-广东妙机精密科技股份有限公司 | 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | LHH药品稳定性试验箱-BPS系列恒温恒湿箱-意大利超低温冰箱-上海一恒科学仪器有限公司 | 浙江美尔凯特智能厨卫股份有限公司 | 上海刑事律师|刑事辩护律师|专业刑事犯罪辩护律师免费咨询-[尤辰荣]金牌上海刑事律师团队 | 泡沫消防车_水罐消防车_湖北江南专用特种汽车有限公司 | 翰墨AI智能写作助手官网_人工智能问答在线AI写作免费一键生成 | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | 垃圾压缩设备_垃圾处理设备_智能移动式垃圾压缩设备--山东明莱环保设备有限公司 | 无锡市珂妮日用化妆品有限公司|珂妮日化官网|洗手液厂家 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 上海皓越真空设备有限公司官网-真空炉-真空热压烧结炉-sps放电等离子烧结炉 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 | 骨龄仪_骨龄检测仪_儿童骨龄测试仪_品牌生产厂家【品源医疗】 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 火锅加盟_四川成都火锅店加盟_中国火锅连锁品牌十强_朝天门火锅【官网】 | 伊卡洛斯软装首页-电动窗帘,别墅窗帘,定制窗帘,江浙沪1000+别墅窗帘案例 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 云阳人才网_云阳招聘网_云阳人才市场_云阳人事人才网_云阳人家招聘网_云阳最新招聘信息 | 化妆品加工厂-化妆品加工-化妆品代加工-面膜加工-广东欧泉生化科技有限公司 | 天然气分析仪-液化气二甲醚分析仪|传昊仪器 | 渗透仪-直剪仪-三轴仪|苏州昱创百科| 高温链条油|高温润滑脂|轴承润滑脂|机器人保养用油|干膜润滑剂-东莞卓越化学 | C形臂_动态平板DR_动态平板胃肠机生产厂家制造商-普爱医疗 | 代做标书-代写标书-专业标书文件编辑-「深圳卓越创兴公司」 | 东莞市天进机械有限公司-钉箱机-粘箱机-糊箱机-打钉机认准东莞天进机械-厂家直供更放心! | 自动化展_机器人展_机床展_工业互联网展_广东佛山工博会 |