iT邦幫忙

1

php 文件引入的優化?

我目前的做法是在每一頁都有一個總體的 require_once 例如 handler.php
這會有很多個引入檔案
只是我發現一個問題是「路徑」
他需要絕對路徑
有時候我引入了A,但是A裡面又有引入其他BCD
而BCD又可能引入其他EFG
每個檔案存放的路徑幾乎不同
所以我是靠 dirname(__FILE__) 解決
但想問問有沒有改善的方式
就很像 RN 或某些語言,加入 import XXX, XXX, XXX 就能夠引入正確的檔案進來該頁使用,無論「被引入的檔案」或「要引入的檔案」本身在哪個路徑,都已經設定好了。
想問問 php 有沒有類似的做法?或是有更好的方式可以改善這個引入?
剛剛有稍微看live coding了一下關於 namespace, use, class 發現不是用在這...

1
浩瀚星空
iT邦研究生 3 級 ‧ 2018-10-12 09:09:01
最佳解答

以前還未寫成mvc時。我都會先寫一支init.php。所有的程式都會引入該檔。並用require的方式來做運行。
init檔才會去做include_once引入其它的檔案。

現在因為寫成mvc的方式,比較沒有這方面的問題了。

asys0512 iT邦研究生 5 級 ‧ 2018-10-12 10:58:28 檢舉

我昨天看了幾部LIVE CODING介紹如何寫自己的MVC,發現有點不太好懂。。。應該是說只懂了一半。。根據網域的名字才選擇引入的文件,但假設有一個檔案是全局都要使用的呢?

浩瀚星空 iT邦研究生 3 級 ‧ 2018-10-12 11:09:46 檢舉

那就是設定一個共用的檔案啊。
這因該不會很難懂吧。
我上面說的init.php。就是屬於一種共用全局使用的檔案。
只是對我來說,init只是算一個初始觸發器。
所有的動作都還是會寫在init內。

這是為了讓所有的程式碼不需要改來改去,只要單純的去載入init這支檔案就好。
要改的部份只要在init就行了。
這樣可以避免當要引入新的東西。還需要在各程式碼一個一個改。

安全點,可以在各程式裏,再宣告一個常數定義。可以提供給init使用特規的控制也行。

mvc的改寫來說,大多數都是屬於單一入口。所以在一些初始化的設計上就會比較單純許多。再加上都是class物件的運行原理。就不用太過擔心引入方面的問題。

0
weiclin
iT邦高手 4 級 ‧ 2018-10-12 00:23:52

關鍵字: composer autoload, psr-0, psr-4, psr-7
另外你可以用 include __DIR__ . '/../foo.php' 去抓到正確的相對路徑檔案

asys0512 iT邦研究生 5 級 ‧ 2018-10-12 10:56:34 檢舉

我現在的作法就是這個~ __DIR__

weiclin iT邦高手 4 級 ‧ 2018-10-12 12:38:17 檢舉

另外還有個東西叫做 include_path

例如你把 /abc/cdf 設成 include_path, 這樣 include "xyz.php" 時就會第一個先去找 include_path 裡面有沒有這個檔案, 也就是第一個會先找 /abc/cdf/xyz.php, 沒有找到才會去別的地方找

但是要注意如果你是 include 路徑, 例如以 / 或是 ../ 之類開頭的話, include_path 就會被忽略

1
asys0512 iT邦研究生 5 級 ‧ 2018-10-12 10:57:05 檢舉

所以 namespace 真的是用在這。。也等於是MVC

rockfire iT邦新手 5 級 ‧ 2018-10-12 11:19:46 檢舉

namespace 主要是 怕重複命名而已,假設A 寫 fun link() ,B 也寫 fun link(),如果沒有命名空間 有可能發生錯誤 或是 覆蓋過去,跟MVC 沒多大關係

我要發表回答

立即登入回答