我目前的做法是在每一頁都有一個總體的 require_once 例如 handler.php
這會有很多個引入檔案
只是我發現一個問題是「路徑」
他需要絕對路徑
有時候我引入了A,但是A裡面又有引入其他BCD
而BCD又可能引入其他EFG
每個檔案存放的路徑幾乎不同
所以我是靠 dirname(__FILE__)
解決
但想問問有沒有改善的方式
就很像 RN 或某些語言,加入 import XXX, XXX, XXX 就能夠引入正確的檔案進來該頁使用,無論「被引入的檔案」或「要引入的檔案」本身在哪個路徑,都已經設定好了。
想問問 php 有沒有類似的做法?或是有更好的方式可以改善這個引入?
剛剛有稍微看live coding了一下關於 namespace, use, class 發現不是用在這...
以前還未寫成mvc時。我都會先寫一支init.php。所有的程式都會引入該檔。並用require的方式來做運行。
init檔才會去做include_once引入其它的檔案。
現在因為寫成mvc的方式,比較沒有這方面的問題了。
我昨天看了幾部LIVE CODING介紹如何寫自己的MVC,發現有點不太好懂。。。應該是說只懂了一半。。根據網域的名字才選擇引入的文件,但假設有一個檔案是全局都要使用的呢?
那就是設定一個共用的檔案啊。
這因該不會很難懂吧。
我上面說的init.php。就是屬於一種共用全局使用的檔案。
只是對我來說,init只是算一個初始觸發器。
所有的動作都還是會寫在init內。
這是為了讓所有的程式碼不需要改來改去,只要單純的去載入init這支檔案就好。
要改的部份只要在init就行了。
這樣可以避免當要引入新的東西。還需要在各程式碼一個一個改。
安全點,可以在各程式裏,再宣告一個常數定義。可以提供給init使用特規的控制也行。
mvc的改寫來說,大多數都是屬於單一入口。所以在一些初始化的設計上就會比較單純許多。再加上都是class物件的運行原理。就不用太過擔心引入方面的問題。
關鍵字: composer autoload, psr-0, psr-4, psr-7
另外你可以用 include __DIR__ . '/../foo.php'
去抓到正確的相對路徑檔案
我現在的作法就是這個~ __DIR__
另外還有個東西叫做 include_path
例如你把 /abc/cdf 設成 include_path, 這樣 include "xyz.php"
時就會第一個先去找 include_path 裡面有沒有這個檔案, 也就是第一個會先找 /abc/cdf/xyz.php
, 沒有找到才會去別的地方找
但是要注意如果你是 include 路徑, 例如以 /
或是 ../
之類開頭的話, include_path 就會被忽略