奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

php語(yǔ)言

PHP自動(dòng)加載

時(shí)間:2025-03-12 02:48:32 php語(yǔ)言 我要投稿
  • 相關(guān)推薦

PHP自動(dòng)加載

  很多的初學(xué)者在學(xué)習(xí) PHP 的時(shí)候最早面對(duì)的問(wèn)題之一就是 require 、 include 和 require_once 、include_once 的相愛(ài)相殺。那么在了解了它們相愛(ài)相殺的故事后,往往就開始使用起了框架。以下是關(guān)于框架的介紹,希望對(duì)大家有用,更多內(nèi)容請(qǐng)關(guān)注應(yīng)屆畢業(yè)生網(wǎng)!

  框架固然是干活的好工具,但是你知道你平時(shí) new 一個(gè)新類的時(shí)候,發(fā)生了什么嗎?有想過(guò)為什么我們遵循規(guī)范就會(huì)自動(dòng)的幫我們做好一切的加載嗎? 讓我們一切來(lái)探索發(fā)現(xiàn)其中的奧秘。

  時(shí)間線

  蒸汽時(shí)代

  在 PHP 代碼的頂部你是不是經(jīng)常看到這樣的代碼。

  require 'lionis.php';require 'is.php';require 'cool.php';

  如果只是引入幾個(gè) PHP 腳本,那還可以接受。那引入成千上萬(wàn)個(gè)腳本的時(shí)候,爆炸是在所難免的。如果對(duì)一個(gè)腳本改了個(gè)名字,還需要對(duì)引入改腳本的每個(gè)腳本改名,能不爆炸嗎?連打出這段話都怎么繞。

  電氣時(shí)代

  在 PHP 電氣時(shí)代,開始出現(xiàn)了 __autoload 和 spl_autoload_register 函數(shù)注冊(cè)自定義的自動(dòng)加載策略。

  通俗的來(lái)說(shuō),__autoload 和 spl_autoload_register 是一個(gè) 殺手組織,他們會(huì)去雇傭 各國(guó)殺手 (函數(shù))。當(dāng)我們想搞定某個(gè)人的時(shí)候(new),只需要提供名字(類名),剩下的 殺手 會(huì)幫我們搞定的。

  __autoload

  PHP 5 開始提供這個(gè)函數(shù) 傳送門。當(dāng)你使用的 類 找不到的時(shí)候,它把類名當(dāng)成參數(shù)扔進(jìn)這個(gè)函數(shù)。

  }

  }

  }$lionis = new Lionis();

  輸出

  歐耶耶, 我就是 Lionis

  spl_autoload_register

  如果我們 項(xiàng)目 很大很老又或者你是一個(gè) 愛(ài)折騰 的少先隊(duì)員,需要引入的東西有不一樣的規(guī)范,這時(shí)候如果都放在 autoload 函數(shù)里,這個(gè)函數(shù)馬上就會(huì)膨脹的。而且autoload 是全局唯一的,如果被人占用了,可能會(huì)導(dǎo)致錯(cuò)誤。(欲使一個(gè)人滅亡,必將先使其膨脹。)

  PHP 5.1.2 開始提供這個(gè)函數(shù) 傳送門,注冊(cè)給定的函數(shù)作為 __autoload 的實(shí)現(xiàn)。所以,我們看一些框架或插件在自己使用的時(shí)候,為了兼容可能會(huì)出現(xiàn) function_exists(spl_autoload_register)。

  }// 函數(shù)spl_autoload_register('lionisIsCoolFind');// 匿名函數(shù)spl_autoload_register(function($require) { require './' . $classname . '.php';

  });// 類中的函數(shù)spl_autoload_register(array('Lionis', 'loadClass'));

  歐耶,這下我們可以寫很多不同的自動(dòng)加載函數(shù)了。

  信息時(shí)代

  師傅小心,前面有妖氣! 。如果我們每個(gè)人都自己實(shí)現(xiàn)一套自動(dòng)加載的方法,每個(gè)PHP 組件和 框架都使用獨(dú)特的自動(dòng)加載器,而且每個(gè)框架使用不同的邏輯加載PHP類、接口和性狀。

  那當(dāng)我們使用一些第三方框架的時(shí)候,還需要去弄清楚引導(dǎo)文件中的 自動(dòng)加載器,那樣是有多和 時(shí)間 過(guò)不去呢。 PHP-FIG 認(rèn)識(shí)到了這個(gè)問(wèn)題了,推薦使用 PSR-4 規(guī)范,來(lái)促進(jìn)組件之間的 互操作性,這樣我們就可以使用一個(gè)自動(dòng)加載器了。

  PSR-4 規(guī)范

  利用命名空間的前綴和文件系統(tǒng)中的目錄對(duì)應(yīng)起來(lái)。

  映射關(guān)系為

  namespace => filePath\Lionis\Cool => cool

  帶有命名空間的類

  }

  創(chuàng)建一個(gè)對(duì)象

  這個(gè)時(shí)候,按照 PSR-4 的規(guī)范,自動(dòng)加載器應(yīng)該去加載 cool/ 目錄下的 Real.php。

  不對(duì)!那這樣不是還要自己去實(shí)現(xiàn) 自動(dòng)加載器 嘛,不然怎么 無(wú)中生有 出現(xiàn) 自動(dòng)加載器 呢?難道官方 內(nèi)置 了?

  你 out 了吧,我們可以使用依賴管理器 composer 來(lái)生成 PSR-4 自動(dòng)加載器。你可能會(huì)疑問(wèn),那我的舊項(xiàng)目沒(méi)有遵循 PSR-4 規(guī)范怎么辦?嘿嘿,讓我們來(lái)探索發(fā)現(xiàn)一下 composer 是怎么解決這個(gè)問(wèn)題的吧。

  Composer

  哦吼吼,我們這次的重點(diǎn)在與探究自動(dòng)加載,所以 composer 的安裝和使用等,就不去討論了。

  composer 自動(dòng)加載設(shè)置了 4種 加載方式:

  PSR-0

  PSR-4

  classmap

  files

  PSR-0

  要求命名空間和目錄層層對(duì)應(yīng),且可以使用 _ 作為路徑分隔符,但是這會(huì)導(dǎo)致目錄結(jié)果變得過(guò)深。

  在 composer 執(zhí)行 install 等操作時(shí),composer 會(huì)把文件中的配置存儲(chǔ)在 vendor/composer/autoload_psr0.php文件中的返回?cái)?shù)組中。

  例如:定義了Very\Good=>vendor\Lionis\IsReal\Cool,在調(diào)用 use Very\Good\Love\SomeClass,PSR-0 加載的實(shí)際目錄為 vendor/Lionis/IsReal/Cool/Very/Good/Love/SomeClass.php。

  對(duì)吧,這簡(jiǎn)直深得嚇人,所以 PSR-0 被官方廢除了。但是一些主流的框架已經(jīng)實(shí)現(xiàn)了 PSR-0,為了向下兼容還是要實(shí)現(xiàn) PSR-0。

  composer.json配置:"autoload": { "psr-0": { "Very\\Good": "vendor\Lionis\IsReal\Cool"

  }

  }

  PSR-4

  PSR-4 是現(xiàn)在比較推薦的方法,用于替代 PSR-0。

  與 PSR-0 不同的是,取消掉了 _ 作為分隔符和目錄結(jié)構(gòu)。

  在 composer 執(zhí)行 install 等操作時(shí),composer 會(huì)把文件中的配置存儲(chǔ)在 vendor/composer/autoload_psr4.php文件中的返回?cái)?shù)組中。

  例如:定義了Very\Good=>vendor\Lionis\IsReal\Cool,在調(diào)用 use Very\Good\

  Love\SomeClass,PSR-4 加載的實(shí)際目錄為 vendor/Lionis/IsReal/Cool/Love/SomeClass.php。

  composer.json配置:

  "autoload": { "psr-4": { "Very\\Good": "vendor\Lionis\IsReal\Cool"

  }

  }

  classmap

  classmap 通過(guò)配置指定的目錄和文件,在 composer 執(zhí)行 install 等操作時(shí),composer 會(huì)去掃描對(duì)應(yīng)的目錄下以.php結(jié)尾的文件中的 class,并存儲(chǔ)在 vendor/composer/autoload_classmap.php文件中的返回?cái)?shù)組中。

  composer.json配置:"autoload": { "classmap": [ "Lionis/", "Xiaoer/"

  ]

  }

  如果 Lionis 下有一個(gè)叫 VeryCool的文件,那么在vendor/composer/autoload_classmap.php 中會(huì)生成。

  $baseDir . '/Lionis/VeryCool.php', // 其他的映射);

  files

  files 就是直接簡(jiǎn)單粗暴的加載文件。在 composer 執(zhí)行 install 等操作時(shí),composer 會(huì)把文件中的配置存儲(chǔ)在 vendor/composer/autoload_static.php文件中的生成一個(gè) $files 數(shù)組。

  composer.json 配置:"autoload": { "files": ["Lionis/Very/Cool.php"]

  }

  小結(jié)

  composer 通過(guò)使用 composer.json,用 json 的格式來(lái)指定我們需要自動(dòng)加載的規(guī)則。我們只要在入口文件引入 vendor/autoload.php 就能很方便的便能使用 自動(dòng)加載。

  如果你對(duì) composer 實(shí)現(xiàn) 自動(dòng)加載 的原理感興趣,可以順著 vendor 中的 autoload.php 去看看源碼。

  總結(jié)

  從 石器時(shí)代 到 信息時(shí)代,PHP 經(jīng)歷了很多試驗(yàn)和改變后正在變得越來(lái)越好。當(dāng)然,許多優(yōu)秀的框架讓我們開發(fā)速度更快,需要理解的一些知識(shí)點(diǎn)也隨之被隱藏起來(lái),讓我們更加專注于實(shí)現(xiàn)邏輯。但是,我們有的時(shí)候還是要嘗試的去理解他們工作的原理,來(lái)提升我們自己。像我老師說(shuō)過(guò)的,所不定一下子踩到狗屎運(yùn)了呢。

【PHP自動(dòng)加載】相關(guān)文章:

php自動(dòng)生成sitemap地圖代碼10-21

使用php自動(dòng)提交表單的方法11-16

php自動(dòng)生成sitemap地圖的代碼10-07

php自動(dòng)生成sitemap地圖的代碼07-31

PHP自動(dòng)獲取關(guān)鍵字的方法技巧08-11

jquery+php實(shí)現(xiàn)搜索框自動(dòng)提示07-16

php+ajax實(shí)時(shí)輸入自動(dòng)搜索匹配的方法10-08

如何實(shí)現(xiàn)PHP靜態(tài)新聞列表自動(dòng)生成代碼08-19

php中tp驗(yàn)證表單與自動(dòng)填充函數(shù)代碼07-16

主站蜘蛛池模板: 雷山县| 乐业县| 特克斯县| 中西区| 申扎县| 济南市| 永丰县| 恩施市| 镶黄旗| 新河县| 广丰县| 岢岚县| 磴口县| 班戈县| 抚松县| 治多县| 谢通门县| 恭城| 徐州市| 南康市| 睢宁县| 闵行区| 上思县| 蕉岭县| 永和县| 蛟河市| 石台县| 郑州市| 黑龙江省| 尉犁县| 瑞昌市| 平乐县| 庆城县| 尉犁县| 公安县| 巴林左旗| 玛曲县| 略阳县| 东丰县| 宜宾市| 呼图壁县|