iT邦幫忙

0

想問一些 router 、MVC、CLASS .....等問題

  • 分享至 

  • xImage

之前有發問過類似的問題,不過沒有講得很清楚我的開發方式。而現在想繼續問一些最近看到的疑問,容我先介紹一下我目前的開發環境和一些作法,想請有經驗的大大們幫我改善我的程式~
本身目前使用的是 mysqli(mariadb) + php7 + jquery3 方式開發,但對於 router 、MVC架構、CLASS NAMESPACE、autoload,CURL 的運作仍然是不太了解,不知道哪個才是正確的做法?從上次的提問到現在已經看了不少YOUTUBE其他高手的實作,發現每個人的做法都不太相同,而導致我不太知道哪種作法才是對的、適合我的。
雖然嘗試了不少新的寫法,例如 OOP mysqli connection,但對於新的觀念仍然想不到該怎麼替換掉自己腦中的做法,因為我知道再寫下去可能會很難維護,也不好讓其他人協作。
我先詳細說明一下我的開發方式,請有經驗的大大教我如何順利地改變作法

  • 目前一個網頁就是一個PHP檔案,每一個檔案上跟下都會引入一個 PHP檔案(header.php, footer.php),footer.php主要是放置 JS引入,或是根據檔案名稱的不同引入需要的js,以及各種簡單或複雜的jquery語法檔案。
  • header.php 引入的文件就極為複雜,有一個文件夾裡面放了許多sql語句,會進行分類,每個php裡都會有個 switch,根據哪個檔案路徑去引入哪些sql語句,裡面也包含一個文件是許多 function ,雖然有大概的規劃在對的文件中引入該function,但實際上還是跟 class + namespace差的甚遠。(html標頭也會在這個檔案中引入)
  • 有個文件是 env.php,會根據host去顯示正確的環境變數
  • sql connect.php 目前是每個網頁都會引入,雖然每個網頁都會需要連接資料庫,但這做法似乎不是很對,自從了解OOP後。
  • 有個文件是與後端資料庫互動的,叫做 update.php,裡面也是利用 switch + type 來根據 我給的 GET/type 去找到對的行為。就是前端 ajax 帶一個 type 去update.php裡面找對的請求,根據 type的不同做不同的事情。而 update.php裡面中也會引入 sql connect.php、必要的 function和env.php。
  • 有個 css.php是引入所有需要的 css檔案,有必要的話也會根據檔案的不同引入不同的css。

我參考了github上大神的寫法,例如 https://github.com/bramus/routerhttps://github.com/phalcon/mvchttps://github.com/php-curl-class/php-curl-classhttps://github.com/ThingEngineer/PHP-MySQLi-Database-Class ... 簡直是新世界,但苦於現在的寫法跟他們天差地遠....

所以我想問問我這樣的擺放方式,能夠怎麼改善,甚至可以將其MVC、CLASS化?我目標是希望能夠讓人看得懂我的程式碼,一起協作。我相信這不容易...但我相信臉書推出一開始的寫法也不是這樣順利。有太多需要改的地方,但我不知道從何開始下手,先從最容易變動的開始....想請有經驗的大大指點迷津,真的非常感謝! 我會時不時補充的!
歡迎大大加l i n e 好友(在我的個人檔案)。有發問問題會優先丟網址給你
已經準備好改善我的程式碼了~

疑問補充:

  1. namespace + class 的引入跟一堆 function 寫在同個php 然後一次引入,這兩者會有哪些差別?假設你有很多 function ,有些是後端需要,有些是前端顯示需要,你會怎麼擺?
  2. 每個頁面都引入 sql connect,跟 OOP connect作法有什麼差別?
  3. js 的管理?假設同一個js檔案中有很多 click, mouse 事件,你會寫在同一個js檔案嗎?
  4. 我在同一個js檔案中會放置多個 ajax function,也是利用 type 來決定要去找哪個 ajax ,如果是你你會怎麼做?
  5. css,js 你會在一開始就將css,js 全部引入嗎?或是能用什麼方式有效分開?使該出現的時候再出現,我是用 switch 作法,你會怎麼做?
  6. 我的 update.php 作法是好的嗎?如果是你會怎麼做?
  7. 在一個 php 的文件中,基本會有兩個檔案引入,header.php, footer.php,這是可以的做法嗎?
看更多先前的討論...收起先前的討論...
q00153 iT邦新手 3 級 ‧ 2018-11-10 22:47:22 檢舉
建議找個 mvc 的 php 框架來學習
框架學會了,上方的問題大概也都解決了
私心是推薦 laravel
因為...我還不會其他框架 XD
火爆浪子 iT邦研究生 1 級 ‧ 2018-11-11 00:22:20 檢舉
我目前想先知道框架的思維,好讓我套用在自己的網站上,只是確實是不懂...
我只教你一件事,辦得到你再來繼續其他的事。
辦不到表示你的基礎完全不夠。
這做法說簡單很簡單,說難也很難。
重點是你能不能持續100天。
對!我以前的師父的要求是365天,但我幫你減了超過3倍的量。
這件事情就是:
一天寫一個class,這個class要能執行。
前面20天只專注在寫一個class做一件事,至於做什麼事隨你高興,沒有一定。
20~40天,每天寫的class都要能繼承其他的class。也不管你要做什麼事。
40~60天,每天寫的class要能夠載入其他的class來使用,也就是拋棄繼承這件事。
60~80天,每天寫的class都要定義interface,非介面規定方法,其他class不得呼叫,也不可繼承。
最後20天,每天寫一個應用於繼承的多型class。要能直接叫用父類別的功能,而能改動自己類別實作的功能。
這就是你當前的課題。百日之後,請你再次使用laravel,你會有不同的感覺。
但這中間有個但書,百日之內,你要嚴格限制自己在it邦10天內只能問一個問題,其他都必須靠自己去解決問題。
你不要以為為什麼要下這個限制。
因為這是解決你「心態急燥」的最佳良方。學會不急燥。問題可以看得更清楚。
以上,是對你的建議,但要做不做就看你自己了。
還有,你的疑問補充有7條,卻全部都只指向一件事,那就是:
『你code寫太少了』
以我過來人的經驗,這事在code寫得夠多時,你不用問別人,心中都會有答案。
你要問別人,所謂的「別人」百百種,每個人都有自己心中的定見。
別人有,我也有,那你是要聽我的?還是要聽別人的?還是等到別人爭執了你還是拿不定主意?
你平常的問題很多,可是這些問題幾乎就是code寫得太少的例證。
你必須要學習有自己大膽的定見。
寫程式最終工作都是要你自己來完成的。
你不可能在跟別人合作時還在問:這樣對不對?這樣好不好?這樣行不行?
我會告訴你,工程師堅持己見吵架很正常。
不要以為乖乖聽話乖乖做事的就是好的工程師。
懂的遇到問題馬上反映,是好的工程師。
這裡所指的問題通常指的需求確認、規格詳細。
但是一遇到程式的問題就要發問,則是個被動的工程師。
因為這表示沒有花時間在寫code和思考。總想要一步得到答案。
這種想法非常的危險,因為在真的遇到bug時,你就會陷入無限輪迴逃不出來。
因為沒有經歷過code的洗禮和不斷的思考解決模式。
當真的遇到bug時,就只會一心想向別人尋求協助而不能自己得到解答。

在我的工作歷程中,那種難解的bug非常的多(畢竟都是接前人的code)
但是憑著過去不斷練習重構、不斷的寫物件、不斷的了解設計方法、設計模式。
照樣可以把別人寫的亂七八糟難分難解的東西導正過來。
這個別人能教嗎?不能。
這只有自己寫過成千萬甚至上億行code去累積出來的。
你真正要學習的,是這個東西。
他才會引領你去成為一個獨當一面的工程師。而不是只會發問的工程師。

最後提點你一件事:
你不要光會發問。然後問到就當自己的東西不肯施捨。
我會建議你,學會的東西就嘗試去教。
真要覺得沒膽,最快的方式就是找個論壇自告奮勇當講師站在台上。
站上去就有膽了。

強者之所以會強是因為他有站出來的氣場。
你想當強者?還是當弱者?
Homura iT邦高手 1 級 ‧ 2018-11-11 10:57:21 檢舉
可樂大 人真好
給那麼多建議@@
weiclin iT邦高手 4 級 ‧ 2018-11-11 12:23:07 檢舉
需要饅頭(mentor)的話找可樂就對了
我只能說一件事,你現在還沒學會走,就想要飛了。
有野心是不錯的,如果有辦法達到這個能耐。

但如果怕會跌跌撞撞的,需要請人扶的話。
那你還是先從基本的走路開始會比較好。

就如可樂說的,很多事情都是個人的經驗,及寫作的方式。也有各自自已的理念。a給你說一種,b告訴你一種。請問你覺得想要聽誰的。
而且程式會依照不同的情況,來決定開發的依據及方向。

我也直接跟你說,我跟可樂有在一個共同的技術line。我們兩個也很常因為個人的意見不同而非常「激烈」討論過。

所以你來問人家什麼方式好與不好。我只會說,用你認為會的方式是最好了。
然後再自已去研究自已的寫法到底算好還是不好。
火爆浪子 iT邦研究生 1 級 ‧ 2018-11-12 12:37:26 檢舉
我是很想知道高手們的寫法如何,我相信高階工程師有部分可能不會使用框架,而是自己寫一個框架用,我是當參考用,學的還沒有很精。
我也是希望可以寫一些東西貼在網上,讓人搜尋查看,但現在我覺得還太菜,不是我不願意分享,是因為還在學很多東西,所以想直接問問大大們,可以避免走你們以前走錯的路
程式界沒有高手這種東西。
只有誰寫的多,誰經驗多。
至於用不用什麼,當用則用。
客戶叫你用就要用。

我該說你真的想太多,才阻礙了你進步嗎?
其實你有個論點並不太對。
並不是高階的說程師不會使用框架。而是高階工程師不怕使用任何框架。
但依照客戶需求的各自不同。確實有時會用框架,有時不會。

會不會使用框架並非只是針對單一個人,而是一個團體。
就如我早期我也是自寫框架。但在後期開始組團隊時。為了新進成員學習及交接方便。還是找了一個框架來應用。

不過可樂說的沒錯了,有些東西問了也沒用,沒有一個所謂的好與不好的寫法。
只有適合不適合的應用方式。而該如何去應對及應用。則是看你的經驗。
程式的東西是學無止盡的,就算說你目前用的東西是當下最好的。沒多久就還會有一套更好的方式。

我就用我的經歷談好了。在早期的javascript來說,當時還有vbscript與javascript兩家在拼。且沒有所謂的誰好用誰不好用。
在當時是ie當道的時代,自然就先學了vbscript。但在後期,新的瀏覽器應聲而起,許多瀏覽器直接都是通用於javascript。一直到最後,vbscript就慢慢的不是主流了。開始著重於javascript上了。

之後,class及框架的東西也慢慢的應聲而起。在早期用javascript已經用到很熟的情況下。jquery悄悄問世,我在其jquery1.0到2.0版之間。都還是直接使用javascript。
一直到2.x的後期,開始覺得使用jquery確實可以省下許多寫法。也有其更好的應用方式。在當時因還有存在舊系統的情況下。也就javascript與jquery混著處理。一直慢慢的更換jquery。

所以說,現在或許告訴你什麼是最好的,你去學習了。但發現還有更好的。你是否又要再更換?

答案是「是」也「不是」
一切都是看當下的情況。我一直到現在還有dos時代的客戶存在。還在用dbase的應用程式。(不知道什麼是dbase的話,去查一下吧,很早期的資料庫系統)
火爆浪子 iT邦研究生 1 級 ‧ 2018-11-12 15:14:04 檢舉
感謝兩位大大的說明:D
火爆浪子 iT邦研究生 1 級 ‧ 2018-11-12 15:14:39 檢舉
只是我不確定我這樣的寫法是不是對的(如我上面講的)
所以想詢問說的大大的經驗能怎麼改會比不改更好
我當然也可以覺得我這樣點寫法是超完美
但事實我是覺得不是很完美,越後面越雜
卻又不知道怎麼變更
rockfire iT邦新手 5 級 ‧ 2018-11-12 17:27:59 檢舉
借串問一下 可樂大大,
我對OO的觀念也是入門級,
你提到 最後20天,每天寫一個應用於繼承的多型class
我這樣寫算是有應用到嗎?
#rockfire
算是有應用……
但你建構式那麼多個echo是在?????
rockfire iT邦新手 5 級 ‧ 2018-11-13 09:14:00 檢舉
那是方便看結果,想說請人看code不要用的太複雜。
平常開發 我都是 回傳 array json Boolean
不會 class 底下輸出

突然發現我多印了,等等來改
火爆浪子 iT邦研究生 1 級 ‧ 2018-11-14 21:39:27 檢舉
我看了一下MVC教學,網址都是在打同一個 index
Miles iT邦新手 2 級 ‧ 2018-11-16 00:59:29 檢舉
知道怎麼改善前,要先知道手邊的 PHP 有提供什麼樣的功能可以幫助我們,所以首先你要了解的是跟 PHP 能「直接」提供什麼功能。

Router 和 MVC 這兩個主題與 PHP 沒有相關,因此建議先都不要碰。該先了解的應該是基礎,也就是 function 與 class。

http://php.net/manual/en/language.functions.php
http://php.net/manual/en/language.oop5.php

邊了解,邊應用在你的專案上,先寫了一陣子再說吧。

附五年前寫的教學範例程式參考:

https://gist.github.com/MilesChou/6008828
https://gist.github.com/MilesChou/6008841

雖然是 PHP 5 寫的,不過與 PHP 7 相去不遠矣。如果對範例程式碼有任何問題的話,請去 PHP 官網找解答,答案全都放在那了。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
Darwin Watterson
iT邦好手 1 級 ‧ 2018-11-13 11:22:10

參考埼玉老師的修煉歷程:

https://ithelp.ithome.com.tw/upload/images/20181113/20109107f3udmPDDyH.jpghttps://ithelp.ithome.com.tw/upload/images/20181113/20109107HmjPrBKObb.jpg
https://ithelp.ithome.com.tw/upload/images/20181113/20109107F5weoiiab9.jpg

ps.看完可樂大的回覆建議,腦海中就浮現想改一拳超人的衝動,純屬個人興趣分享!勿戰!

小魚 iT邦大師 1 級 ‧ 2018-11-14 19:08:29 檢舉

/images/emoticon/emoticon01.gif

小魚 iT邦大師 1 級 ‧ 2018-11-14 19:09:50 檢舉

我只是想說,
太強了,
看起來沒什麼不協調的感覺...

我要發表回答

立即登入回答