Re: [請益] php code在最後一行才require
※ 引述《pracinverse (改)》之銘言:
: 最近看到PHP的一種用法就是在a.php的最後一行才requrie(b.php);
: 看起來是因為前人想要在a.php裡面先做一些處理後,再去用到b.php的功能,
: 而這種很不OO的方式來做code reuse實在讓我覺得不太習慣,
: 一來一般programming language都是在最一開始去把需用到的其他file include進來,
: 二來要code reuse應該要包成class才能達到封裝的目的。
: 這種"在a.php的最後一行requrie(b.php);"的用法
: 在PHP裡面算是很常見的用法嗎??
: 它算不算一種不好的practice呢?
這很爛,但當年寫出這種 code 的人不是傻,是沒有招可以出
PHP 到 2009 年才有 namespace,autoloading 的規範 PSR-0 是 2010 還 2011 的事
2012 年才有 composer 這個套件管理系統(以前有pear,但得動到系統...)
在那之前,你就算 OO 了你也很難組織你的 code 該怎麼放或啥時載入
而人家寫好的 lib 你得透過一連串的 include 地獄來載入
所以會看到一些現在看起來莫名其妙的做法,例如
- include 一個會 include 幾十個檔案的 php
(不容易有效的載入 lib,於是搞出個類似 .h 檔的東西...)
- 滿天飛的 global
(沒辦法用 namespace 去區隔 class,不如全部先在一個地方先 new 出來備用)
- 為了確保邏輯重用,每個地方都 include 同一個 php
(不知道怎麼 call 同一個 class 的某個 function,或是沒有現代 framework 輔助)
過去 PHP 名聲臭是有原因的,人家已經在21世紀了,PHP 還在打二戰...
composer 出現之後沒幾年,PHP 已經脫胎換骨,變成符合 21 水準的超級 PHP。
然而程式碼被汰換的速度跟不上這超英趕美大躍進
除非能短短兩三年就把整間公司的 code 全部打掉重來...
這是一場 PHP 的文化大革命
--
推薦閱讀:現代PHP
http://www.books.com.tw/products/0010688181
--
頂天立地:愛孩子就要支持蘿莉控
http://goo.gl/Bha7e
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.122.206
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1464236501.A.BCC.html
※ 編輯: GALINE (60.248.122.206), 05/26/2016 12:25:21
推
05/26 12:33, , 1F
05/26 12:33, 1F
推
05/26 12:34, , 2F
05/26 12:34, 2F
推
05/26 12:35, , 3F
05/26 12:35, 3F
→
05/26 12:36, , 4F
05/26 12:36, 4F
※ 編輯: GALINE (60.248.122.206), 05/26/2016 12:41:54
→
05/26 12:43, , 5F
05/26 12:43, 5F
→
05/26 12:56, , 6F
05/26 12:56, 6F
→
05/26 12:57, , 7F
05/26 12:57, 7F
PHP The Right Way 繁體中文版
http://laravel-taiwan.github.io/php-the-right-way/
※ 編輯: GALINE (60.248.122.206), 05/26/2016 13:05:12
推
05/26 13:01, , 8F
05/26 13:01, 8F
→
05/26 13:05, , 9F
05/26 13:05, 9F
推
05/26 13:07, , 10F
05/26 13:07, 10F
→
05/26 13:08, , 11F
05/26 13:08, 11F
推
05/26 14:14, , 12F
05/26 14:14, 12F
推
05/26 14:21, , 13F
05/26 14:21, 13F
→
05/26 14:28, , 14F
05/26 14:28, 14F
→
05/26 14:29, , 15F
05/26 14:29, 15F
推
05/26 15:04, , 16F
05/26 15:04, 16F
→
05/26 15:30, , 17F
05/26 15:30, 17F
→
05/26 15:30, , 18F
05/26 15:30, 18F
→
05/26 15:32, , 19F
05/26 15:32, 19F
→
05/26 15:47, , 20F
05/26 15:47, 20F
推
05/26 16:35, , 21F
05/26 16:35, 21F
→
05/26 17:10, , 22F
05/26 17:10, 22F
推
05/26 20:33, , 23F
05/26 20:33, 23F
推
05/26 21:01, , 24F
05/26 21:01, 24F
→
05/26 21:21, , 25F
05/26 21:21, 25F
→
05/26 21:21, , 26F
05/26 21:21, 26F
推
05/26 21:22, , 27F
05/26 21:22, 27F
推
05/26 22:36, , 28F
05/26 22:36, 28F
→
05/26 22:37, , 29F
05/26 22:37, 29F
→
05/26 22:39, , 30F
05/26 22:39, 30F
推
05/26 22:44, , 31F
05/26 22:44, 31F
推
05/27 08:43, , 32F
05/27 08:43, 32F
→
05/27 08:54, , 33F
05/27 08:54, 33F
→
05/27 09:38, , 34F
05/27 09:38, 34F
推
05/27 09:49, , 35F
05/27 09:49, 35F
推
05/27 10:19, , 36F
05/27 10:19, 36F
→
05/27 10:20, , 37F
05/27 10:20, 37F
→
05/27 10:21, , 38F
05/27 10:21, 38F
→
05/27 10:23, , 39F
05/27 10:23, 39F
用古代的做法,我碰過的問題大概是這些
- 很容易重複載入同一個 lib,於是PHP就抱怨 class/function 定義重複
- 為了避免上一點,於是到處用 include_once,然後踩到效能問題
- 其實我覺得還好。不過認識的人說踩到效能問題過,解法是把 once 們拔掉....
- 每個 lib 組織檔案的方式都不同,所以 include 路徑看起來就五花八門...
- 不同的檔案結果取了同樣的的 function name,於是 PHP 噴 error
- 統一的 include 裡面什麼 lib 都 include 進來,連沒用到的功能也全部載進來
- 你看到某個 function,想改他的輸出值,但搜尋不到這個名字的 function
- 或是你會找到三個同名的 function,不知道該改哪個
PSR-0/PSR-4 相當程度的解決上面這些問題
composer 則是幫你把符合規範的 autoloader 寫好(好吧,其他語言是內建...)
當然上面這些用 include 的方式也不是不能解決,但是需要公司內有明確的規範
訂規範就不是純技術問題,需要政治力量(例如挺你的長官)介入...
而且就算有內規,3rd party lib 也不會照你的規則走
你換公司的時候也要重來一次
現在則是比較明確,「照PHP-FIG的規定走」,這是超越公司/組織的政治力。
不過 PHP 用以前的作法也完全可以動,現況就變成你要弄乾淨可以弄的很乾淨。
但你想弄髒也依然可以弄的很髒...
※ 編輯: GALINE (60.248.122.206), 05/27/2016 13:14:22
→
05/27 23:49, , 40F
05/27 23:49, 40F
推
05/28 15:40, , 41F
05/28 15:40, 41F
推
05/28 23:13, , 42F
05/28 23:13, 42F
推
05/31 17:29, , 43F
05/31 17:29, 43F
推
06/01 09:31, , 44F
06/01 09:31, 44F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):