php偽靜態教程,有人說現在前端入門門檻越來越低?
前端開發趨勢一直都是熱度高且變化快。因此,對于前端開發者來說,想要跟上這些不斷變化的趨勢,需要耗費巨大的精力。至于2022年前端技術具體會發生哪些變化,讓我們一起來聊聊吧。
1、前端介紹
前端,也稱為“客戶端開發”,簡單來說,你可以在應用程序或網站的屏幕上看到的所有內容都屬于前端。讓我們考慮一個現實的例子:你正在訪問的網站。內容設計、圖像、段落和線條之間的間距,左上角的公司徽標,以及右下角的小通知按鈕——所有這一切都是前端。2、前端技術包括哪些?
前端開發是創建Web頁面或app等前端界面呈現給用戶的過程,通過HTML,CSS及JavaScript以及衍生出來的各種技術、框架、解決方案,來實現互聯網產品的用戶界面交互 。它從網頁制作演變而來,名稱上有很明顯的時代特征。在互聯網的演化進程中,網頁制作是Web1.0時代的產物,早期網站主要內容都是靜態,以圖片和文字為主,用戶使用網站的行為也以瀏覽為主。隨著互聯網技術的發展和HTML5、CSS3的應用,現代網頁更加美觀,交互效果顯著,功能更加強大。2.1、HTML
掌握HTML是網頁的核心,是一種制作萬維網頁面的標準語言,是萬維網瀏覽器使用的一種語言,它消除了不同計算機之間信息交流的障礙。因此,它是目前網絡上應用最為廣泛的語言,也是構成網頁文檔的主要語言,學好HTML是成為Web前端開發人員的基本條件。HTML是一種標記語言,能夠實現Web頁面并在瀏覽器中顯示。HTML5作為HTML的最新版本,引入了多項新技術,大大增強了對于應用的支持能力,使得Web技術不再局限于呈現網頁內容。隨著CSS、JavaScript、Flash等技術的發展,Web對于應用的處理能力逐漸增強,用戶瀏覽網頁的體驗已經有了較大的改善。不過HTML5中的幾項新技術實現了質的突破,使得Web技術首次被認為能夠接近于本地原生應用技術,開發Web應用真正成為開發者的一個選擇。HTML5可以使開發者的工作大大簡化,理論上單次開發就可以在不同平臺借助瀏覽器運行,降低開發的成本,這也是產業界普遍認為HTML5技術的主要優點之一。AppMobi、摩托羅拉、Sencha、Appcelerator等公司均已推出了較為成熟的開發工具,支持HTML5應用的發展。2.2、CSS
學好CSS是網頁外觀的重要一點,CSS可以幫助把網頁外觀做得更加美觀。2.3、JavaScript
學習JavaScript的基本語法,以及如何使用JavaScript編程將會提高開發人員的個人技能。2.4、Bootstrap
主流框架之一,Bootstrap 是基于 HTML、CSS、JavaScript的,它簡潔靈活,使得 Web 開發更加快捷。2.5、html5-boilerplate
該框架可以快速構建健壯,且適應力強的web app或網站。2.6、Meteor
Meteor是新一代的開發即時web應用的開源框架,它能在較短時間內完成開發。2.7、Semantic UI
基于自然語言有效原則的UI組件框架。2.8、Amaze UI
國內首個開源HTML5跨屏前端框架產品系列,中文排版支持更優、本土化組件豐富。該產品系列中有專門針對移動端的HTML5混合應用開發框架Amaze UI Touch以及針對跨屏HTML5網頁開發的Amaze UI Web。其中,Amaze UI Touch可以幫助開發者通過豐富的組件,快速構建出與原生APP相媲美的專屬移動端的HTML5應用。3、2022年前端技術領域變化
3.1、Web組件化
基本上這就是未來。為什么?因為這些純Web組件與框架無關,并且可以在沒有框架或沒有任何框架拼寫標準化的情況下工作。因為它們沒有JS疲勞,并且得到了現代瀏覽器的支持。因為它們的文件大小和消耗將是最佳的,并且VDOM渲染令人贊嘆。這些組件提供了Custom Element,這是一個Javascript API,可讓你定義新html標簽,HTML模板以指定布局,當然還有Shadow DOM,它本質上是特定于組件的。在這個領域中知名的工具是Lit-html(和Lit-element),StencilJS,SvelteJS,當然還有Bit,它們是可重用的模塊化組件,可以在任何地方直接共享,使用和開發。考慮組件開發時代的未來,以及模塊化,可重用性,封裝和標準化的原理,Web組件就是答案。3.2、微前端
Serverless即“無服務器”架構,它試圖幫助開發者擺脫運行后端應用程序所需的服務器設備的設置和管理工作,它由第三方云計算供應商負責后端基礎結構的維護,同時以服務的方式為開發者提供所需的功能,例如數據庫、消息、身份驗證等。微前端的概念類似于微服務,它將前端應用拆分成一個個更小的更簡單的能夠獨立開發、測試、部署的小塊,在用戶看來它依舊是一個獨立的產品。前端業務在發展到一定規模后,需要一種能將業務化繁為簡的架構。常用的微前端解決方案有single-spa、qiankun。微前端、Serverless目前都未出現大規模應用的情況,各大公司對此都處于探索階段,兩項技術穩步發展,期待未來大規模的應用。3.3、微設計
布拉德·弗羅斯特(Brad Frost)提出的理論將Web應用程序的構成與原子,分子,有機體等的自然構成進行了比較,最后以具體的Web頁面作為結尾。原子由分子組成(例如,文本輸入+按鈕+標簽原子=搜索分子)。分子組成生物體。有機體位于布局模板中,該模板可以具體化為交付給用戶的頁面。Atomic組件的優勢不只是通過模塊化和可重用的組件來構建模塊化UI應用程序。這種范例迫使你思考組成每個組件的角色和API。3.4、Web組裝
Web程序集將語言多樣性帶入Web開發中,以彌補JavaScript創建的空白。它被定義為“基于堆棧的虛擬機的二進制指令格式。Wasm被設計為可移植目標,用于編譯高級語言(如C/C ++/Rust),從而可以在Web上為客戶端和服務器應用程序進行部署。”埃里克·埃利奧特在他的文章中優雅地概述了該概念的好處:在wasm中實現對性能至關重要的內容,并將其像標準JavaScript模塊一樣導入。一種新語言:WebAssembly代碼定義了以二進制格式表示的AST(抽象語法樹)。您可以編寫和調試文本格式,以便于閱讀。對瀏覽器的改進:瀏覽器將理解二進制格式,這意味著我們將能夠編譯二進制捆綁包,壓縮后的二進制包小于我們今天使用的文本JavaScript。較小的有效載荷意味著更快的傳遞。根據編譯時的優化機會,WebAssembly的運行速度可能比JavaScript快!3.5、封裝樣式和Shadow Dom
組件的一個重要方面是封裝-能夠使標記結構,樣式和行為保持隱藏狀態,并與頁面上的其他代碼分開,以使不同部分不會沖突,并且代碼可以保持整潔。Shadow DOM API是其中的關鍵部分,它提供了一種將隱藏的單獨DOM附加到元素的方法。Shadow DOM實際上已經被瀏覽器使用了很長時間了。您可以將影子DOM視為“ DOM中的DOM”。它是自己的隔離DOM樹,具有自己的元素和樣式,與原始DOM完全隔離。它允許將隱藏的DOM樹附加到常規DOM樹中的元素上。該陰影DOM樹以影子根開頭,可以與普通DOM相同的方式附加到所需的任何元素上。這樣做的主要目的是,我們不需要為類使用名稱空間,因為不存在名稱沖突或樣式溢出的風險。這就是Web組件樣式進行真正封裝的解決方案。3.6、TypeScript接管前端
最近的每次交談都聽起來好像TS正在接管前端開發。據報道,有80%的開發人員承認他們想在下一個項目中使用或學習TypeScript。盡管有缺點,但TS代碼更易于理解,實現更快,產生的錯誤更少。想重構你的React應用程序并與TS一起使用嗎?去吧。想逐步開始嗎?使用Bit之類的工具逐步將你的應用程序中的組件重構為TS,并使用React-Typescript編譯器獨立于應用程序構建它們。TypeScript,它是有類型定義的 JavaScript 的超集,包括 ES5、ES5+ 和其他一些諸如反射、泛型、類型定義、命名空間等特征的集合,為了大規模 JavaScript 應用開發而生。復雜軟件需要用復雜的設計,面向對象就是一種很好的設計方式,使用 TypeScript 的一大好處就是 TypeScript 提供了業界認可的類( ES5+ 也支持)、泛型、封裝、接口面向對象設計能力,以提升 JavaScript 的面向對象設計能力。市面上的框架也對 TypeScript 提供了非常好的支持。React 對.tsx 支持非常好,比如我在 Midway controller 里支持 tsx 寫法,這是非常大膽的,對于后面 react ssr 來說是一個極大便利;Vue 從 v2.5.0 之后對 ts 支持就非常好;Node.js Web 框架,尤其是 Egg.js 對 ts 支持非常好,當然還有更高級更專注的的 Midway 框架,Midway 基于 Egg 生態,同時提供 IoC 等高級玩法;在使用 Webpack 編譯前端應用式,通過 TypeScript-loader 可以很輕松地將 TypeScript 引入到 Webpack 中。有了 TypeScript-loader,就可以一邊使用 TypeScript 編寫新代碼,一邊零碎地更新老代碼。畢竟 ts 是 js 超集,你有空就改,非強制,特別包容。3.7、從組件庫到動態集合
組件開發的出現催生出了一種工具的產生,它就是Bit,以及其托管平臺Bit.dev。使用Bit來連續隔離現有組件并將其導出到動態可重用的共享集合中,而無需努力構建麻煩且高度耦合的組件庫。使用Bit,你可以獨立隔離,版本控制,構建,測試和更新UI組件。它簡化了在現有應用程序中隔離組件,將其收集到遠程集合并在任何地方使用的過程。每個組件都可以在任何項目之外構建,測試和渲染。你可以更新單個組件(及其相關組件),而不是整個應用程序。在bit.dev平臺中(或在你自己的服務器上),可以為不同的團隊遠程托管和組織組件,以便每個團隊都可以控制自己的組件開發。每個團隊都可以共享和重用組件,但又保持其獨立性和控制力。該平臺還提供了共享組件的多合一生態系統:它自動記錄UI組件的文檔,在交互式中渲染組件,甚至提供內置注冊表以使用npm安裝組件。此外,你可以在任何存儲庫中導入組件并進行修改。在短期內,這以與Spotify/iTunes更改以前通過靜態CD音樂專輯共享音樂的過程類似的方式,徹底改變了共享和組成組件的過程。這是一個動態的模塊化解決方案,每個人都可以共享和使用組件。從長遠來看,Bit有助于微前端的開發。主要是因為它已經可以讓你獨立版本,測試,構建和更新UI應用程序的各個部分。3.8、設計與開發的整合
隨著組件驅動設計系統的興起,使產品和團隊之間的UI一致,新工具應運而生,彌合了設計師和開發人員之間的鴻溝。但是,這不是簡單的任務。盡管代碼本身實際上是唯一的真理源(這是用戶真正得到的),但是大多數工具都試圖彌合設計者與設計者之間的鴻溝。在此類別中,您可以找到成幀器,Figma,Invision DSM等。在開發人員的末端,你可以看到Bit.dev之類的平臺如何托管下一代組件庫并幫助建立共享組件的采用范圍。該平臺為您的實際源代碼提供了呈現的可視化效果,以便設計人員可以與開發人員合作,并以可視化方式在源代碼本身上進行討論。要注意的另一個有前途的想法是設計令牌。將令牌放置在代碼中,設計人員可以通過它們直接與外部協作工具真正控制簡單的樣式方面(例如顏色)。與Bit.dev等平臺集成后,可以創建比以往更緊密的工作流程。3.9、跨端開發框架迅猛發展
從最初的React Native,到后來的Flutter,electron,跨端的解決方案受到了大量前端工程師的關注和學習。Flutter2的發布,其Web開發能力也過度到了穩定版本,同時桌面端開發能力也進入了beta階段,進一步提高了代碼的復用性,同時它也拓展了很多IOS的功能,生態進一步壯大。近乎一套代碼便可以完成移動端、web端、桌面端應用的開發,大大縮減開發人員學習其他平臺開發技術的成本,一線互聯網公司也在將其部分應用使用Flutter進行重構。electron作為一個基于Nodejsde桌面端跨端開發框架,深受大廠的喜愛,飛書、vscode、twitch等均是基于electron進行開發。跨平臺也讓 Electron 可同時開發 Web 應用和桌面應用,無論是 UI,還是代碼,很多資源都可以共享,大幅減少了開發者的工作量。需求推動著跨端框架的發展,無論從成本還是效率考慮,跨端開發都將成為前端開發未來的發展方向之一,其生態也會迎來瘋狂擴張。3.10、低代碼平臺持續發展
隨著十四五規劃的推出,進一步推動了企業數字化轉型的步伐,眾多企業面臨數字化轉型。相較于培養一支開發團隊,多數企業更傾向于使用低代碼平臺,通過無編碼或低編碼的方式快速搭建自己的數字化系統。同時,低代碼平臺迎來了爆發式的增長,至今仍將保持50%的平穩增速。平臺快速發展,覆蓋的業務場景也逐漸增多,中小企業95%以上的場景可通過低代碼平臺搭建,中大型企業的覆蓋率也能達到70%。低代碼平臺的迅猛發展,很多業務場景的開發工作逐漸被平臺替代,很多簡單的前端頁面的開發都會轉移到平臺中完成,初級前端工程師的生存重建逐漸被蠶食。同時低代碼平臺的發展也會對前端工程師提出了更高的要求。4、總結
前端開發趨勢一直都是熱度高且變化快。因此,對于前端開發者來說,想要跟上這些不斷變化的趨勢,需要耗費巨大的精力。至于2022年前端技術具體會發生哪些變化,讓我們拭目以待吧。本文分享自華為云社區《2022前端技術領域會有哪些新的變化》,作者:架構師李肯。
黑客滲透測試該如何學習?
Web安全相關概念
熟悉基本概念(SQL注入、上傳、XSS、CSRF、一句話木馬等)。1.通過關鍵字(SQL注入、上傳、XSS、CSRF、一句話木馬等)進行Google/SecWiki;
2.閱讀《精通腳本黑客》,雖然很舊也有錯誤,但是入門還是可以的;看一些滲透筆記/視頻,了解滲透實戰的整個過程,可以Google(滲透筆記、滲透過程、入侵過程等);
3周
熟悉滲透相關工具
熟悉AWVS、sqlmap、Burp、nessus、chopper、nmap、Appscan等相關工具的使用。
1.了解該類工具的用途和使用場景,先用軟件名字Google/SecWiki;
2.下載無后們版的這些軟件進行安裝;
3.學習并進行使用,具體教材可以在SecWiki上搜索,例如:Brup的教程、sqlmap;
4.待常用的這幾個軟件都學會了可以安裝音速啟動做一個滲透工具箱;
5周
滲透實戰操作
掌握滲透的整個階段并能夠獨立滲透小型站點。
1.網上找滲透視頻看并思考其中的思路和原理,關鍵字(滲透、SQL注入視頻、文件上傳入侵、數據庫備份、dedecms漏洞利用等等);
2.自己找站點/搭建測試環境進行測試,記住請隱藏好你自己;
思考滲透主要分為幾個階段,每個階段需要做那些工作,例如這個:PTES滲透測試執行標準;
4.研究SQL注入的種類、注入原理、手動注入技巧;
5.研究文件上傳的原理,如何進行截斷、雙重后綴欺騙(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,參照:上傳攻擊框架;
6.研究XSS形成的原理和種類,具體學習方法可以Google/SecWiki,可以參考:XSS;
7.研究Windows/Linux提權的方法和具體使用,可以參考:提權;
8.可以參考: 開源滲透測試脆弱系統;
1周
關注安全圈動態
關注安全圈的最新漏洞、安全事件與技術文章。通
1.過SecWiki瀏覽每日的安全技術文章/事件;
通過Weibo/twitter關注安全圈的從業人員(遇到大牛的關注或者好友果斷關注),天天抽時間刷一下;
2.通過feedly/鮮果訂閱國內外安全技術博客(不要僅限于國內,平時多注意積累),沒有訂閱源的可以看一下SecWiki的聚合欄目;
4.養成習慣,每天主動提交安全技術文章鏈接到SecWiki進行積淀;
5.多關注下最新漏洞列表,推薦幾個:exploit-db、CVE中文庫、Wooyun等,遇到公開的漏洞都去實踐下。
6.關注國內國際上的安全會議的議題或者錄像,推薦SecWiki-Conference。
3周
熟悉Windows/Kali Linux
學習Windows/Kali Linux基本命令、常用工具;
1.熟悉Windows下的常用的cmd命令,例如:ipconfig,nslookup,tracert,net,tasklist,taskkill等;
2.熟悉Linux下的常用命令,例如:ifconfig,ls,cp,mv,vi,wget,service,sudo等;
3.熟悉Kali Linux系統下的常用工具,可以參考SecWiki,《Web Penetration Testing with Kali Linux》、《Hacking with Kali》等;
4.熟悉metasploit工具,可以參考SecWiki、《Metasploit滲透測試指南》。
3周
服務器安全配置
學習服務器環境配置,并能通過思考發現配置存在的安全問題。
1.Windows2003/2008環境下的IIS配置,特別注意配置安全和運行權限,可以參考:SecWiki-配置;
2.Linux環境下的LAMP的安全配置,主要考慮運行權限、跨目錄、文件夾權限等,可以參考:SecWiki-配置;
3.遠程系統加固,限制用戶名和口令登陸,通過iptables限制端口;
4.配置軟件Waf加強系統安全,在服務器配置mod_security等系統,參見SecWiki-ModSecurity;
5.通過Nessus軟件對配置環境進行安全檢測,發現未知安全威脅。
4周
腳本編程學習
選擇腳本語言Perl/Python/PHP/Go/Java中的一種,對常用庫進行編程學習。
1.搭建開發環境和選擇IDE,PHP環境推薦Wamp和XAMPP,IDE強烈推薦Sublime,一些Sublime的技巧:SecWiki-Sublime;
2.Python編程學習,學習內容包含:語法、正則、文件、網絡、多線程等常用庫,推薦《Python核心編程》,不要看完;
3.用Python編寫漏洞的exp,然后寫一個簡單的網絡爬蟲,可參見SecWiki-爬蟲、視頻;
4.PHP基本語法學習并書寫一個簡單的博客系統,參見《PHP與MySQL程序設計(第4版)》、視頻;
5.熟悉MVC架構,并試著學習一個PHP框架或者Python框架(可選);
6.了解Bootstrap的布局或者CSS,可以參考:SecWiki-Bootstrap;
3周
源碼審計與漏洞分析
能獨立分析腳本源碼程序并發現安全問題。
1.熟悉源碼審計的動態和靜態方法,并知道如何去分析程序,參見SecWiki-審計;
2從Wooyun上尋找開源程序的漏洞進行分析并試著自己分析;
3.了解Web漏洞的形成原因,然后通過關鍵字進行查找分析,參見SecWiki-代碼審計、高級PHP應用程序漏洞審核技術;
4.研究Web漏洞形成原理和如何從源碼層面避免該類漏洞,并整理成checklist。
5周
安全體系設計與開發
能建立自己的安全體系,并能提出一些安全建議或者系統架構。
1.開發一些實用的安全小工具并開源,體現個人實力;
2.建立自己的安全體系,對公司安全有自己的一些認識和見解;
3.提出或者加入大型安全系統的架構或者開發;
4.看自己發展咯~
開發獨立EXE桌面應用程序?
摘要:在我認識的所有程序員里,每個人幾乎都有專屬于自己的常用工具和相關資源,今天給大家奉上數十個程序員硬核工具,我相信這里總有一款工具是屬于你的!
程序員生產力工具大全如下:
1. Idea-Intellij IDEA (java 編程語言 開發的集成環境)
業界排名第一的java開發工具,非常非常好用,如果還在用eclipse的朋友,趕緊來體驗一把,你一定會愛上她的。
2. SecureCRT (SSH終端仿真程序)
SecureCRT是一款終端仿真程序,支持SSH(SSH1和SSH2)以及Telnet和rlogin協議。SecureCRT用于連接運行包括Windows、UNIX和VMS在內的遠程系統的理想工具。
3. Termius (全平臺的遠程終端)
termius是一款全平臺的遠程終端,Termius不僅涵蓋了Windows、Linux、OSX,還變態得支持Android和iOS(以后在地鐵、公交上都可以隨時拿出手機來排查線上問題啦,還真是廣大程序員的福音呢。
4. Google Chrome (谷歌瀏覽器)
Google Chrome是一款由Google公司開發的網頁瀏覽器,該瀏覽器基于其他開源軟件撰寫,包括WebKit,目標是提升穩定性、速度和安全性,并創造出簡單且有效率的使用者界面。
5. iTerm (為Mac OS X編寫的終端仿真程序)
iTerm是一個為Mac OS X編寫的,功能齊全的終端仿真程序;目標是在為用戶提供OS X下最佳的命令行體驗;字母i代表了本地蘋果的外觀和風格的程序界面,并把重點放在完整的國際支持; 它合并由兩個項目, CTerminal和TerminalX ,而這兩者都是基于JTerminal項目;該軟件非常有實用和易用性。
6. Visual Studio Code (簡稱“VS Code”,編寫現代Web和云應用的跨平臺源代碼編輯器)
重新定義和優化了代碼編輯,以便生成和調試新式 Web 應用程序和云應用程序。也是著名的文本編輯器,它是輕量級的,vSCode的一大特點就是你可以通過多種方式來調整設置,而且Vim可以和VScode集成在一起,它還帶有一個集成終端,可用的擴展太多,使開發人員的工作變得更加輕松。我最喜歡的一些擴展是AWS Toolkit, ESLint,Live Server, Live Share, Prettier-代碼格式化程序,YAML,Live Sass編譯器,Docker等。
7. VMware Fusion & VMware workstation (為計算機開發的虛擬機管理程序)
是在計算機上無縫運行 Windows 的最佳方式,可確保 Windows 應用程序在計算機上實現無縫運行可以在基于 Intel 的計算機上無縫運行 Windows、Linux 以及其他 PC等多個操作系統,進而構建、測試或演示軟件。
8. Navicat Premium (數據庫管理工具)
Navicat premium是一款數據庫管理工具,是一個可多重連線資料庫的管理工具,它可以讓你以單一程式同時連線到 MySQL、SQLite、Oracle 及 PostgreSQL 資料庫,讓管理不同類型的資料庫更加的方便。
9. Postman (api調試工具)
簡單來說,四個詞,簡單、實用、大方、美觀!postman這款網頁調試工具的windows客戶端,功能強大的HTTP調試與模擬插件。使用Postman可以進行API開發、請求、調試,除了它,還可以使用lnsomnia和Insomnia Designer作為API文檔。
10. RedisDesktopManager (一款可視化 redis管理工具 )
Redis Desktop Manager是一款簡單快速、跨平臺的Redis桌面管理工具,也被稱作Redis可視化工具,Redis Desktop Manager官方版是一款開源軟件,支持通過SSH Tunnel連接,支持windows、mac等多平臺。
11. Dash (基于MAC的 API文檔瀏覽器和代碼片段管理器)
“開發者不可或缺的杰作。”Dash 可讓您的 Mac 即時離線訪問 200 多個 API 文檔集。立刻搜索離線文件集200層+的API ,100+備忘單和 href="">更多 功能。您甚至可以"">生成自己的文檔集 或 href="">請求 包含href="">文檔集 。
12. Fiddler & Wireshark (http抓包工具)
Fiddler和Wireshark都是進行抓包的工具:所謂抓包就是將網絡傳輸發送與接收的數據包進行截獲、重發、編輯、轉存等操作,也用來檢查網絡安全。作為開發者,經常想調試一下http請求發送的數據的詳情,那么可以使用這2款軟件。用抓包工具wireshark的人相對來說更多一些。
13. HBuilder X (HTML5的Web開發工具)
當前最快的HTML開發工具,強大的代碼助手幫你快速完成開發,最全的語法庫和瀏覽器兼容性數據讓瀏覽器碎片化不再頭痛。作為HBuilder下一代的全新編輯器,HBuilderX被定位為ide和編輯器的完美結合,除了對某種語言的語法分析、提示、轉到定義、調試,同時加強了對通用文本處理能力,界面更加清爽,擁有比上一代更加有效的快捷鍵體系。
14. MobaXterm (遠程終端控制軟件,集串口,SSH遠程登錄和FTP傳輸三合一的工具)
多功能終端MobaXterm Professional Edition 是一款豪華、全功能的終端軟件。MobaXterm帶來了所有必要的Unix命令到Windows桌面,在開箱單便攜式exe文件。MobaXterm允許您啟動遠程會話。遠程shell,MobaXterm遠比Putty好用,您可以選擇創建SSH,遠程登錄,Rlogin,RDP,VNC,XDMCP,FTP,SFTP或串行會話。
15. Sublime Text (跨平臺代碼編輯器)
http://www.sublimetext.cn/
Sublime Text 是一款用于代碼、標記和散文的精致文本編輯器。Sublime Text 中文網致力于為廣大國內開發者提供詳盡的中文文檔、使用說明等,助力開發者快速掌握這個編輯器。
16.webstorm (專業的HTML編輯工具)
web開發的必備的一款開發神器,比如寫js、頁面、css,那么這款軟件用起來非常順手。此軟件和idea出自于同一家公司,這家公司做了很多異常好用的軟件,基本上你需要的各種開發相關的IDE,這家公司都生產。可以說是“Web前端開發神器”、“最強大的HTML5編輯器”、“最智能的JavaScript IDE”。新版對JavaScript,TypeScript和CSS支持更好,改進了Vue.js的體驗,并為Jest集成增加了新功能。
17.Xshell (功能強大的終端模擬器)
linux原創控制軟件,完全免費且非常穩定的 SSH 客戶端 ,支持多種遠程協議,提供了很多特色與高級功能,簡體中文界面也讓你輕松管理遠程服務器。 Xshell 的 Screen 會話不閃屏,而且可以回滾;Script 的執行順序可以調整;可以同時發送指令到多個 session;支持布局切換等。
18. SwitchHosts (修改Hosts文件的工具)
這是用于在多個HOSTS之間進行切換。可在公用hosts文件 、當前系統hosts、本地方案和在線方案間進行切換。作為一名開發人員,經常需要修改本地host,你還是通過修改host文件來操作的么?那樣太慢了,這里建議大家使用switchhosts這款軟件,可以快速修改本地host,非常好用。
其他工具:
1. CodeIf(智能命名) : https://unbug.github.io/codelf
大部分開發者都或多或少遇到過變量命名的煩惱,如果命名不規范,不僅會影響開發的效率,而且對后面維護的同學來說也是一個不小的挑戰,因為他要去揣摩你這個變量的含義。隨著項目越來越復雜,變量和函數數量越來越多,雖然每個編程語言都有各種命名規范,但是也不能解決所有的問題。
“計算機科學里兩件最難的事:緩存失效和命名。” Codelf通過搜索在線開源平臺Github, Bitbucket, Google Code, Codeplex, Sourceforge, Fedora Project的項目源碼,幫開發者從中找出已有的匹配關鍵字的變量名,從而幫助為變量名苦惱的開發者命名。這個搜索服務支持直接搜索中文。
同時可以在自己用的編輯器里安裝插件,支持 VS Code、Atom、Sublime Text 和 Chrome。
2. DocsChina-印記中文 : https://www.docschina.org
這是一個前端中文文檔合集,進入網站可以看到開發中經常使用的前端中文文檔。如果你的英文實在不怎么好,還在為找中文文檔而煩惱,這里將是你非常好的選擇。記得放到自己的瀏覽器收藏夾里哦!
3. any-rule(正則表達大全): http://github.com/any86/any-rule
any-rule 維護了一個常用正則表達式合集,并且本身是一個支持 Web/VS Code/idea/Alfred Workflow 多平臺的正則表達式工具。
4. tool.lu(在線工具): https://tool.lu
程序員總是有很多小工具要使用,比如圖片、Base64編碼、Markdown編輯器時間戳轉換,進制轉換等,在線運行各種語言代碼。這個網站包含了太多程序員需要用到的小工具了。比如你想運行點JAVA代碼,又不想麻煩的在系統中安裝JAVA環境,可以使用里邊的在線運行代碼工具,然后選擇JAVA,寫點JAVA代碼就可以直接運行了。
5. Baomitu(前端靜態源庫): https://cdn.baomitu.com
這個靜態資源庫是支持HTTP/2的CDN服務,有了它,如果你是自己的小型項目或者是做測試就不用下載任何的代碼庫,直接粘貼地址過來用就可以,因為是國內的CDN庫,速度還非常的快。
6. Typora-Markdown(編寫工具):https://www.typora.io
一款實用的 Markdown 編寫工具,所見即所得,用Markdown編寫文章是一個程序員的標準配置,也就是標配。現在有很多在線工具都支持Markdown,什么有道云筆記、雀語,、印象筆記等。這種簡單的界面,沉浸式的編寫,清晰的大綱,它就像一件稱手的兵器,讓你一旦擁有就愛不釋手。
7. Snipaste (簡單便捷的截圖軟件):https://zh.snipaste.com/download.html
一款免費的桌面截圖軟件,功能強大,使用方便,支持任何屏幕位置截圖,支持窗口截圖,支持快捷方式截圖。您可通過截取貼圖,使兩張圖合并為一張圖,還能調整截圖文字圖像等等,是一款非常強大的貼圖軟件,喜歡此款貼圖軟件的朋友不要錯過。
8. Captura (最好用的開源錄屏、gif動態圖片制作工具)
官網:https://captura.updatestar.com/ github:https://github.com/MathewSachin/Captura
通過這款工具可以幫助你輕松錄制各種視頻。支持全屏錄制、區域錄制兩種方式,全屏錄制可以錄制全部的電腦屏幕,將電腦屏幕上所有的動態都錄制下來,該軟件還擁有視頻編解碼器,可以對視頻進行解碼,支持mp4、avi、GIF、webm等格式,可以滿足一般的解碼需要。還支持屏幕截圖、剪貼板,簡單的圖像編輯等功能,是一款非常好用的屏幕錄像工具。
9. 向日葵 (遠程控制軟件): https://sunlogin.oray.com/
向日葵遠程控制是一款提供遠程控制服務的軟件。向日葵遠程控制支持主流操作系統Windows、Linux、Mac、Android、iOS跨平臺協同操作,在任何可連入互聯網的地點,都可以輕松訪問和控制安裝了向日葵遠程控制客戶端的設備。整個遠控過程,可通過瀏覽器直接進行,無需再安裝軟件。
10. Everything (本地文件檢索工具):http://www.voidtools.com/support/everything/
由voidef="">tools 開發的一款文件搜索工具,這款軟件是基于名稱實時定位文件和目錄。Everthing功能強大,體積小巧,第一次安裝使用時會建立一個索引數據庫,將所有文件和文件夾的名稱導入其中,后續使用能夠以極快的速度快速搜索,查找到你所需要的文件。
11. StarUML (UML畫圖工具)
畫uml圖的一款神器,類圖、時序圖、流程圖、狀態圖等等,都可以用這款工具輕松應對。
12. uTools (生產力工具集):https://u.tools/
一個極簡、插件化、跨平臺的現代化桌面軟件。通過自由選配豐富的插件,打造你得心應手的工具集合。這個工具,我只能說他是一款神奇,太牛逼,這款工具中匯集了很多好用的工具,可以通過這款工具秒開電腦上的各種軟件。
搜索資源網站工具:
1.Bing
Bing 國際版:https://cn.bing.com/ 感覺比某度要好用多了。
2.DuckDuckGo
DuckDuckGo:https://duckduckgo.com/ 從官網的介紹來看這個搜索引擎不收集用戶信息,而且沒有廣告。
3.Stack Overflow
Stack Overflow:https://stackoverflow.com/ 我們如果常用 Google,很多技術問題的答案就在這個網站上,如果你無法使用 Google 可以在這個網站上直接檢索就好了。
4.Gitlogs
Gitlogs:https://www.gitlogs.com/ Gitlogs 是專門針對 GitHub 項目的搜索引擎,我們通過他可以快速找到想要項目。
5.jiumo search
文檔搜索引擎 jiumo search 鳩摩搜書:https://www.jiumodiary.com/ 可以用來找一些技術文檔手冊,很多在百度網盤里。
6.Ebooke
Ebooke:https://ebookee.org/ Ebookee 是一個基于互聯網并提供免費電子圖書下載的搜索引擎網站。
7.Iconfinder
圖標搜索:https://www.iconfinder.com/ 用來查找 logo 圖片。
8.TinEye
TinEye:https://www.tineye.com 用圖片來檢索圖片,我們可以上傳圖片或輸入圖片的 URL 來檢索。
9.SemanticScholar
SemanticScholar:https://www.semanticscholar.org/ SemanticScholar 是一個免費學術搜索引擎,其檢索結果來自于期刊、學術會議資料或者是學術機構的文獻。
10.LibreStock
LibreStock:https://librestock.com/ LibreStock 上可以檢索一些優質的高清圖片。
11.CC Search
CC Search:https://ccsearch.creativecommons.org/ CC Search 上搜索到的圖片資源都是無版權的,我們可以免費的使用。
12.Pexels
Pexels:https://www.pexels.com/ 高質量的圖片網站,可以免費使用。
13.Unsplash
Unsplash:https://unsplash.com/ 免費高清素材網站。
14.The App Store
The App Store:https://theappstore.org/ The App Store 是一個針對蘋果手機、iPad、Mac 設備的應用搜索工具。
在線畫圖工具:
? 在線畫圖工具ProcessOn:https://www.processon.com/
? 在線畫圖工具draw.io:https://app.diagrams.net/
? 在線思維導圖工具:http://www.mindline.cn/webapp
? PlantUML在線編輯器:http://haha98k.com/
在線開發輔助工具:
日常開發經常會用到一些輔助工具我總結為8大類,包括:編解碼工具、轉換工具、正則工具、編譯工具、網絡工具、格式化工具、可視化工具、在線生成器、以及其他工具等等。 具體列表如下:
在線編碼工具:
? BASE64編解碼工具:https://base64.supfree.net/
? MD5編碼工具:https://www.zxgj.cn/g/md5
? AES/DES加解密:http://www.fly63.com/tool/cipher/
? JWT解碼工具:http://jwt.calebb.net/
? ASCII編解碼工具:https://www.matools.com/code-convert-ascii
? Unicode編解碼工具:https://www.zxgj.cn/g/unicode
? UTF-8編解碼工具:https://www.zxgj.cn/g/utf8
? 字符串編解碼工具:https://www.zxgj.cn/g/enstring
? URL編解碼工具:http://tool.chinaz.com/tools/urlencode.aspx?jdfwkey=lbixz1
在線轉換工具:
?在線ASCII碼對照表:http://www.fly63.com/tool/ascii/
? 通用進制轉換工具:https://www.zxgj.cn/g/jinzhi
? 在線浮點數十進制轉換:http://www.binaryconvert.com/
? RGB顏色轉換:https://www.zxgj.cn/g/yansezhi
? 時間戳轉換工具:https://www.zxgj.cn/g/unix
? 計量單位換算工具:http://www.fly63.com/tool/unitable/
? 在線JSON解析:http://www.json.cn/
? 在線JS代碼格式化工具:https://prettier.io/playground/
? SQL壓縮/格式化工具:https://www.zxgj.cn/g/sqlformat
? JSON和XML在線轉換:https://www.zxgj.cn/g/jsonxml
? JSON/YAML在線轉換:http://www.fly63.com/tool/jsonyaml/
? 人民幣大小寫轉換工具:http://www.fly63.com/tool/renmingbi/
正則表達式工具:
? 正則表達式調試工具:https://regexr.com/
? 正則表達式可視化工具:https://jex.im/regulex/
網絡工具:
? IP地址歸屬地查詢:https://www.ip138.com/
? IP地址查詢:https://www.ipip.net/ip.html
? HTTP在線接口測試工具:http://www.fly63.com/php/http/
在線編譯運行工具:
? C#在線編譯運行:https://rextester.com/
? C/C++在線編譯調試:https://www.onlinegdb.com/
? 在線編譯工具套裝:https://c.runoob.com/
可視化/格式化工具:
? 在線前端編輯器: https://codepen.io/
? 在線數據可視化:https://flourish.studio/
? 在線JSON解析:http://www.json.cn/
? 在線CSS代碼可視化工具:https://enjoycss.com/
? XML格式化工具:https://www.zxgj.cn/g/xmlformat
? 在線JS代碼格式化工具:https://prettier.io/playground/
? SQL壓縮/格式化工具:https://www.zxgj.cn/g/sqlformat
? JSON和XML在線轉換:https://www.zxgj.cn/g/jsonxml
? JSON/YAML在線轉換:http://www.fly63.com/tool/jsonyaml/
在線生成器:
UUID在線生成器:https://www.zxgj.cn/g/uuid隨機數生成器:https://www.zxgj.cn/g/suijishu其他常用工具:
在線Nginx配置工具:https://nginxconfig.io/在線對比工具:http://www.fly63.com/tool/textdiff/在線Chrome瀏覽器插件:https://www.crx4chrome.com/在線接口文檔管理工具:http://www.docway.net/在線素材工具:
如果你寫文章,或者做視頻,那就一定少不了要找素材,包括各種圖片、背景、emoji表情、表情包、壁紙、視頻、gif圖等等。
? 免費透明背景圖片素材:http://pngimg.com/
? Emoji表情搜索:https://emoji.svend.cc/
? Emoji表情包下載:https://emojiisland.com/
? open source icons:https://feathericons.com/
? 表情包在線網站:https://fabiaoqing.com/
? 免費PNG圖片庫:https://pluspng.com/
? ICON圖標在線下載:https://www.iconfinder.com/
? 極簡壁紙:https://bz.zzzmh.cn/
? Wallpaper Abyss壁紙:https://wall.alphacoders.com
? Pixabay圖片素材庫:https://pixabay.com/zh/
? Unsplash圖片素材庫:https://unsplash.com
? Pexels圖片素材庫:http://www.pexels.com
? NASA圖片視頻素材庫:https://images.nasa.gov
設計制作類工具:
對于那些文章創作者和視頻創作者而言,設計封面,做海報,設計LOGO,圖片美化等等基本也是剛需。
這樣大概率日常會用到一些簡易好上手的在線設計制作類工具,比如在線P圖、音/視頻輕量化剪輯、logo制作、海報設計制作、圖片美化、在線圖片轉換或生成等等。
? 在線PS:https://www.uupoop.com/
? 在線音頻剪輯:https://www.weixinsyt.com/
? 在線視頻剪輯:https://www.kapwing.com/
? 免費logo在線制作:http://www.uugai.com/
? 藝術字體在線生成:https://www.qt86.com/
? 在線表格轉換工具: https://tableconvert.com/
? 在線海報設計工具: https://www.designcap.com/
? 圖片智能放大工具:https://bigjpg.com/
? 二維碼美化器:https://mh.cli.im/
? 在線代碼截圖工具:https://carbon.now.sh/
? 在線摳圖工具:https://www.remove.bg/zh
? ICO圖標在線生成:http://www.fly63.com/php/ico/
? SVG轉PNG工具:http://www.fly63.com/tool/svg2img/
? 視頻轉GIF工具:http://www.fly63.com/tool/giftxt/
? 二維碼在線生成器:http://www.fly63.com/tool/ewm/
? 二維碼在線解碼:http://www.fly63.com/php/decoder/
寫輔助工具:
寫文章的過程中經常會用到和寫作相關的輔助工具,比方說:字數統計工具、Markdown格式的文章排版工具、圖床網站、代碼截圖工具等等,所以下面這些在線工具就能很好地滿足我的需求。
? 在線字數統計:https://www.eteste.com/
? mdnice markdown排版工具:https://mdnice.com/
? md2all markdown排版工具:http://md.aclickall.com/
? 在線圖床神器:https://picx.xpoet.cn/
? 在線免費圖床:https://sm.ms/
? 圖殼圖床:https://imgkr.com/
? 在線代碼截圖工具:https://carbon.now.sh/
? 在線短鏈接工具:https://urlify.cn/
? 在線文本替換:http://www.fly63.com/tool/textreplace/
在線辦公工具:
部分在線工具主要用來處理一些和文檔以及文稿相關的事情,經常用到的比如:在線的全套pdf處理和轉換工具、各種各樣多媒體文件間的相互轉換工具、在線識別工具、在線壓縮工具等等。
? pdf在線處理工具1:https://smallpdf.com/cn/pdf-tools
? pdf在線處理工具2:https://tools.pdf24.org/zh/
? pdf轉word在線工具:https://www.pdftoword.com/
? 在線多媒體轉換器合集:https://cn.office-converter.com/
? 在線文字識別工具:https://ocr.wdku.net/
? 在線文件壓縮工具:https://docsmall.com/
文檔筆記工具:
好記性不如爛筆頭,作為一個學習者,我覺得記筆記是必不可少的步驟。當然現在基本都做電子筆記和電子文檔比較多。 現如今各式各樣優秀的文檔工具和筆記軟件鱗次櫛比,好用的也有很多,整理成如下列表,這東西各有長處,使用哪個最合意還得看個人習慣和需求了。
? 印象筆記:https://www.yinxiang.com/
? 有道筆記:https://note.youdao.com/
? OneNote:https://www.onenote.com/
? 幕布:https://mubu.com/
? 為知筆記:https://www.wiz.cn/
? 石墨文檔:https://shimo.im/
? Simplenote:https://simplenote.com/
? 語雀:https://www.yuque.com/
編程學習網:
? 嗶哩嗶哩:https://www.bilibili.com/
? C語言網:https://www.dotcpp.com/
? cppreference:http://zh.cppreference.com/
? 中國大學MOOC:https://www.icourse163.org/
? 牛客網:www.nowcoder.com
? 網易公開課:open.163.com
? CodeGym:https://codegym.cc/
? BeginnersBook:https://beginnersbook.com/
? JavaSED:http://www.javased.com/
? codecademy:https://www.codecademy.com/
? Coursera:https://www.coursera.org/
? StackOverFlow:https://stackoverflow.com/
? LeetCode:https://leetcode-cn.com/
? LintCode:https://www.lintcode.com/
在線教程文檔:
這部分主要集中了在做開發過程中隨手參考所要用到的幾乎所有在線教程和官方文檔,有中文版文檔的基本都優先列出來了,但更多時候是英文的官方文檔。
? Git中文教程:https://git-scm.com/book/zh/v2
? SVN中文手冊:http://svnbook.red-bean.com/nightly/zh/index.html
? jQuery API中文文檔:https://jquery.cuishifeng.cn/
? Nginx中文文檔:https://www.nginx.cn/doc/index.html
? Kafka中文文檔:https://kafka.apachecn.org/
? Mybatis中文文檔:https://mybatis.org/mybatis-3/zh/index.html
? 微信小程序官方文檔:https://developers.weixin.qq.com/miniprogram/dev/framework/
? Nodejs中文教程文檔:http://nodejs.cn/learn
? Apache Web Server文檔:http://httpd.apache.org/docs/
? Spring文檔中文版:https://www.springcloud.cc/spring-reference.html
? Golang標準庫文檔中文版:https://studygolang.com/pkgdoc
? Java 8官方文檔:https://docs.oracle.com/javase/8/docs/api/index.html
? Maven官方文檔:http://maven.apache.org/guides/
? Tomcat 8官方文檔:http://tomcat.apache.org/tomcat-8.0-doc/index.html
? Spring Boot官方文檔:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
? RabbitMQ官方文檔:https://www.rabbitmq.com/documentation.html
? RocketMQ官方文檔:http://rocketmq.apache.org/docs/quick-start/
? Dubbo中文文檔:https://dubbo.apache.org/zh/docs/
? Netty官方文檔:https://netty.io/wiki/index.html
? Elasticsearch官方文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
? Spring Cloud官方文檔:https://spring.io/projects/spring-cloud
? Docker官方文檔:https://docs.docker.com/get-started/
? kubernetes中文文檔:https://kubernetes.io/zh/docs/home/
? thymeleaf官方文檔:https://www.thymeleaf.org/documentation.html
? Vue.js中文文檔:https://cn.vuejs.org/v2/guide/
? React.js官方文檔:https://reactjs.org/docs/getting-started.html
? Jenkins中文文檔:https://www.jenkins.io/zh/doc/
華為云平臺:
高效易用的低代碼aPaaS平臺-應用魔方AppCube:https://www.huaweicloud.com/product/appcube.html集華為研發實踐、前沿研發理念、先進研發工具為一體的軟件開發平臺-軟件開發平臺 DevCloud:https://www.huaweicloud.com/devcloud/以上內容分享自華為云社區《吐血整理:程序員都在用什么工具?》,作者: 考過IE勵志當攻城獅 ,部分內容整理自互聯網~
CSS和HTML是什么?
CSS稱之為樣式表,HTML為標記語言。是前端web開發必須掌握的知識之二,再就是JavaScript是前端Web開發也必須掌握的編程語言。
我先用一個網站【千圖網】的源碼分析來了解CSS、HTML、JavaScript各自的作用上圖是千圖網首頁的布局,我先通過Google Chrome來調試看看這個網站的首頁(點擊鼠標右鍵選擇查看就可以看到如下圖所示)
左邊顯示的是HTML的主要內容,右邊顯示的是CSS的內容
CSS是什么呢?其作用又是什么?打開昵圖網首頁,我們可以看到整體布局非常美觀。那如果沒有CSS會怎么樣呢?我們可以查看這個首頁的的源碼,可以看到是有引用css樣式表文件。
我現在將css引用給刪掉
我們再來看下首頁的效果
通過以上操作,你應該就能明白css的作用是什么了吧?
css的主要作用就是用于網頁的排版布局和美化,能夠讓我們開發出來的網頁更好看
HTML是什么?其作用是什么?一個網頁是有很多個部件組成的,有文字顯示、有輸入欄、有列表、有圖片、有視頻、有跳轉到新的頁面的鏈接。我還是用上面網站的首頁結合檢查功能來說明。
上圖中紅色框標出來了,各種類型的部件。
上圖中左側顯示了部分的Html的內容。更多的html的內容,可以到
https://www.w3school.com.cn/index.html
進行了解。非常詳細HTML標記語言的作用就是告訴瀏覽器,在加載的時候顯示的是什么控件,再結合css就能夠顯示出非常漂亮美觀的靜態頁面了。那如果要做一些動態的頁面和數據交互,就需要用到JavaScript,你在這里沒有提到這個問題,我就不做具體的說明了。可以自行查閱相關文檔及說明!
為什么看了視頻還是看不懂?要如何學習?對于初學者來說,其實我是不在建議直接看視頻來學習。個人的的建議是前期購買專業的web前端開發書或者通過我上面講到的w3school網站進行學習,將相關的基礎識知點完全掌握,并跟著書上或者網站上的代碼進行實際的敲打一篇或者多篇。一直到腦子里有印象和概念,看到一個網頁,能夠知道這個網頁的布局是什么樣子的,用到了哪些部件,這個部件對應的html標簽是什么?可能用到了什么樣的css樣式?
只有做了這一步后,你再看視頻教程。更多的是建議看一些項目實戰的視頻,采取第一次將視頻看完,然后實際編寫一次。如果遇到有不記得的地方,回看視頻的,對照視頻進行編寫鞏固。通過這樣子的方式 不斷的加深記憶以及理解html和css的作用。
多敲代碼、多敲代碼、多敲代碼。編譯運行查看實際效果,反復的這個過程中,我相信你現在提到的這個問題,最終就不是問題了。
如你自己本身自學能力不足,還有一個建議就是去專門的IT教育機構進行系統的專業的學習。如果你選擇IT教育機構培訓,一定要注意的就是機構的選擇,這里面也有比較多的坑。
我不是專門的web前端開發,但由于平時的工作原因,有時也需要自己寫了些web頁面。可以關注我私信溝通交流!
php單例模式該如何實現?
PHP 單例模式的實現
單例設計模式為了解決在一個應用中只有一個實例【比如數據庫實例】,并且禁止clone 復制
在PHP中可以繼承單例模式來使用單例模式的特性,避免每次創建一個類都要創建一個對象
一般Sigleton類的實現 參考【https://stackoverflow.com/questions/3126130/extending-singletons-in-php】
但是上面參考鏈接其實也有一點問題 【然后我自己添加了一個回答:) 看到的點個贊奧】
————————————————
一般單例模式的實現
class Singleton
{
private static $instance;
private function __construct() {}
final protected function __clone() {} #不允許被重寫并且會被子類繼承
public static function getInstance()
{
if (! self::$instance instanceof self) {
self::$instance = new self();
}
return self::$instance;
}
}
// $s = new Singleton();#Fatal error: Call to private Singleton::__construct()
$s1 = Singleton::getInstance();
$s2 = Singleton::getInstance();
var_dump($s1,$s2); #object(Singleton)#1 (0) { } object(Singleton)#1 (0) { }
#測試出來兩個實例是同一個對象
#測試clone 對象,會報錯,說明真的只有一個對象存在于應用中
// $s2 = clone $s1; #Fatal error: Call to protected Singleton::__clone()
————————————————
上面的代碼看上去沒有任何問題但是如果我們想讓單例模式可以被繼承,讓子類也具有單例模式的特性,就會出錯
Java 中構造函數是私有的不能被繼承,默認情況下Java的子類會在構造函數中調用父類的無參數構造方法
PHP 可以繼承,哪怕父類是私有構造器
下面是測試 PHP代碼
class A extends Singleton
{
}
$a = new A();#Fatal error: Call to private Singleton::__construct() 調用了父類的private 的構造函數
#如果子類中沒有構造函數就使用父類的構造方法,如果有自己的構造方法,就不會自動調用父類的構造方法,需要顯式調用 parent::__construct();
#所以還是需要調用 靜態方法獲得實例
$a = A::getInstance();
var_dump($a);#object(Singleton)#1 (0) { } #出毛病了,實例化之后還是Singleton對象
#解決方法使用PHP動態綁定,關鍵字static 除了靜態方法之外下面羅列動態綁定的特性
有三個特性
1) 在非靜態環境下,所調用的類即為該對象實例所屬的類【就代表了這個實例】
2) 由于 $this-> 會在同一作用范圍內嘗試調用私有方法,而 static:: 則可能給出不同結果。 [$this 可以調用同一范圍的私有變量方法 static 相當于類名 比如說 A::$instance,就不行]
如果 static::function 或者static::$instance 調用的是同一個類里面的方法不管是不是private 都ok 但是如果是不同類的 就會報錯
猜測性小結: 只要static 調用的元素不在同一個類里面 private 就會報錯
3) 另一個區別是 static:: 只能用于靜態屬性 不是方法【方法都可以調用)
所以最后單例模式可以寫成如下格式
需要注意的 使用 self:: 或者 __CLASS__ 對當前類的靜態引用,取決于定義當前方法所在的類
#定義一個抽象類 被其他類繼承
abstract class Singleton
{
protected static $instance; // 這里必須是protected 如果要讓子類繼承 其次protected才能被 static 調用
private function __construct(){}
final protected function __clone(){}
public static function getInstance()
{
if (! static::$instance instanceof static) {
static::$instance = new static();
}
return static::$instance
$a = A::getInstance();
$b = B::getInstance();
$c = B::getInstance();
$d = A::getInstance();
$e = A::getInstance();
var_dump($a,$b,$c,$d,$e);
#object(A)#1 (0) { }
#object(B)#2 (0) { }
#object(B)#2 (0) { }
#object(A)#1 (0) { }
#object(A)#1 (0) { }
————————————————
小結:
public static function getInstance()
{
if (! static::$instance instanceof static) {
static::$instance = new static();
}
return static::$instance;
}
# 上面方法中必須使用static::$instance 不能使用self::$instance 的原因是子類動態調用的是子類的靜態屬性
# 靜態屬性必須是 protected 原因是 動態調用關鍵字static 調動不是在一個原生類里面的private的屬性時相當于直接 類名::$instance
# 子類必須重定義 protected static $instance; 否則使用的是父類的靜態屬性。
大家還有不懂得可以私信給我解答
以上就是關于php偽靜態教程以及有人說現在前端入門門檻越來越低的相關回答,有更多疑問可以加微。