F3 fatfree小型php框架教程(三)

2021-06-21 07:49:52 字數 2248 閱讀 7633

之前說了很多路由的設定和使用,這裡首先說一下根目錄怎麼定(所謂的根目錄就是localhost的目錄)

一般在安裝apache的時候都會有預設目錄,如果想改可以用這個命令:

php -s localhost:80 -t /var/www/
然後就會自動進入index.php裡面找東西了(自動識別到底是路由還是資料夾)

然後回頭說一下剛才的reroute函式,這個函式是跳轉頁面用的,而且有個特殊用途,不會顯示源網頁!也就是說:

$f3

->

route('get|head /obsoletepage',

function($f3));

在瀏覽器位址列顯示的是「/obsoletepage」而不是真實位址「也就是可以起到隱藏位址的作用。可以不讓使用者知道自己到底訪問的是那個真實位址,可以用來搶瀏覽量之類的。還有一些壞壞的想法哦~這個就自己想吧~

還有一些要注意的是如果我要才傳遞乙個引數get /dogs/@breed,但是如果使用者輸入的是/dogs/那麼引數就沒輸進去了,但是系統也會預設引數為空,這時就

需要我們自己來寫一些報錯機制了

$f3

->

error(404);

f3有很好的自動讀取機制,會在你需要類的時候幫你讀取類,你大可不必寫一大堆include或者required來讀取不同資料夾和不同檔案的php。這個問題黨會幫你解決的。你只需要把檔案儲存在資料夾裡然後一旦你想要呼叫物件裡的方法,你只要告訴框架去自動讀取適合的檔案就可以了:

$f3

->

set('autoload','autoload/');

這個set函式有兩個引數,前面那個是定義『autoload』說明我要做的事情是自動讀取(這個set函式很吊,後面會繼續講解其他功能),然後自動讀取的目錄是『autoload/』相當於這個時候你已經進入這個目錄了。

同時你也可以設定多個自動路徑。

$f3

->

set('autoload','admin/autoload/; user/autoload/; default/');

這裡再次提醒一下,類的名字和檔案的名字必須相同,這樣autoload才可以一下從檔案讀到類裡面。而且f3是不區分大小寫的,所以最好不要用同名的資料夾和檔案。

下面要說說怎麼讀取乙個路徑的檔案:

加入我要讀取的是/var/www/html/autoload/gadgets/ipad.php

首先我們定義的根目錄是/var/www/html/,然後

$f3

->

set('autoload','autoload/');

$obj=new

gadgets

\ipad;

還有檔案裡面的定義是:

namespace

gadgets;

class

ipad

{}

裡面的gadgets自然是與路徑的一樣的了,主要是方便autoload來識別,畢竟框架不區分大小寫。還要注意的是,這些路徑都要以斜槓/結尾:

$f3

->

set('autoload','main/;aux/');

在講下面這個概念之前我要先講一下靜態和動態函式:

靜態函式:程式結束的時候才會消失,一直占用記憶體等待呼叫,不需要類的例項化就能使用。

動態函式:動態載入到記憶體中,不需要的時候就自動free,但是必須要先new乙個類才能在類中被呼叫。

從字面上理解就是如果你只要這個函式並且要常用,用靜態,如果你要整個類的函式都涉及到呼叫,動態的

繼續講:

f3裡面的靜態和動態方法是怎麼呼叫的呢

靜態:

$f3

->

set('autoload','classes/');

$f3->

route('get|post /','main\home::show');

動態:

$f3

->

route('get|post /','main\home->show');

classes/main/home.php

都是裡面有個叫main的namespace的,這就不詳細說了。這裡就是動態靜態呼叫show函式了

關於 0x3f3f3f3f 的問題

0x3f3f3f3f是乙個很有用的數值,它是滿足以下兩個條件的最大整數。1 整數的兩倍不超過 0x7f7f7f7f,即int能表示的最大正整數。2 整數的每8位 每個位元組 都是相同的。我們在程式設計中經常需要使用 memset a,val,sizeof a 初始化乙個陣列a,該語句把數值 val ...

0x3f3f3f3f(無窮大數)

一般定義無窮大數都是inf 99999999,或者0x7f ff ff ff,但是有的時候inf過大,雖然保證了沒有數超過它,但是在需要加上乙個數的時候,inf a可能會導致溢位,最終變成乙個負數。而0x3f3f3f3f的數量級也1e9的,一般題不會給超過1e9的數 在把它當成無窮大的時候,兩個0x...

為何INF設定為0x3f3f3f3f?

在演算法競賽中,我們常常需要用到乙個 無窮大 的值,對於我來說,大多數時間我會根據具體問題取乙個99999999之類的數 顯得很不專業啊!在網上看別人 的時候,經常會看到他們把inf設為0x7fffffff,奇怪為什麼設乙個這麼奇怪的十六進製制數,一查才知道,因為這是32 bit int的最大值。如...