Home  >  Article  >  Backend Development  >  F3-fatfree小型php框架课程(三)

F3-fatfree小型php框架课程(三)

WBOY
WBOYOriginal
2016-06-13 11:53:121495browse

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

之前说了很多路由的设定和使用,这里首先说一下根目录怎么定(所谓的根目录就是localhost的目录)

一般在安装apache的时候都会有默认目录,如果想改可以用这个命令:

<span style="font-size:18px"><code style="padding:0px; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; font-size:12px; color:inherit; background-color:transparent; border:0px; word-wrap:break-word">php -S localhost:80 -t /var/www/</code></span>
然后就会自动进入Index.php里面找东西了(自动识别到底是路由还是文件夹)


然后回头说一下刚才的reroute函数,这个函数是跳转页面用的,而且有个特殊用途,不会显示源网页!也就是说:

<span style="font-size:18px"><code style="padding:0px; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; font-size:12px; color:inherit; background-color:transparent; border:0px; word-wrap:break-word"><span class="variable" style="color:rgb(58,135,173)">$f3</span><span class="object_operator" style="color:black">-></span><span class="string" style="color:black">route</span>(<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'GET|HEAD /obsoletepage'</span>,<span class="whitespace">    </span><span class="function" style="color:rgb(255,20,147)">function</span>(<span class="variable" style="color:rgb(58,135,173)">$f3</span>)<span class="whitespace"> </span>{<span class="whitespace">        </span><span class="variable" style="color:rgb(58,135,173)">$f3</span><span class="object_operator" style="color:black">-></span><span class="string" style="color:black">reroute</span>(<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'<span style="font-size:12px; line-height:22.049999237060547px; white-space:nowrap; background-color:rgb(247,247,249)">http://www.anotherexample.org/</span>'</span>);<span class="whitespace">    </span>}<span class="whitespace"></span>);</code></span>
在浏览器地址栏显示的是“/obsoletepage”而不是真实地址“http://www.anotherexample.org/”,也就是可以起到隐藏地址的作用。可以不让用户知道自己到底访问的是那个真实地址,可以用来抢浏览量之类的。还有一些坏坏的想法哦~这个就自己想吧~


还有一些要注意的是如果我要才传递一个参数GET [email protected],[email protected]?,但是系统也会默认参数为空,这时就

需要我们自己来写一些报错机制了

<span style="font-size:18px"><code style="padding:0px; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; font-size:12px; color:inherit; background-color:transparent; border:0px; word-wrap:break-word"><span class="variable" style="color:rgb(58,135,173)">$f3</span><span class="object_operator" style="color:black">-></span><span class="string" style="color:black">error</span>(<span class="lnumber" style="color:rgb(178,34,34)">404</span>);</code></span>

F3有很好的自动读取机制,会在你需要类的时候帮你读取类,你大可不必写一大堆include或者required来读取不同文件夹和不同文件的php。这个问题党会帮你解决的。你只需要把文件保存在文件夹里然后一旦你想要调用对象里的方法,你只要告诉框架去自动读取适合的文件就可以了:

<span style="font-size:18px"><code style="padding:0px; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; font-size:12px; color:inherit; background-color:transparent; border:0px; word-wrap:break-word"><span class="variable" style="color:rgb(58,135,173)">$f3</span><span class="object_operator" style="color:black">-></span><span class="string" style="color:black">set</span>(<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'AUTOLOAD'</span>,<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'autoload/'</span>);</code></span>
这个set函数有两个参数,前面那个是定义‘AUTOLOAD’说明我要做的事情是自动读取(这个set函数很吊,后面会继续讲解其他功能),然后自动读取的目录是‘autoload/’相当于这个时候你已经进入这个目录了。

同时你也可以设置多个自动路径。

<span style="font-size:18px"><code style="padding:0px; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; font-size:12px; color:inherit; background-color:transparent; border:0px; word-wrap:break-word"><span class="variable" style="color:rgb(58,135,173)">$f3</span><span class="object_operator" style="color:black">-></span><span class="string" style="color:black">set</span>(<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'AUTOLOAD'</span>,<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'admin/autoload/; user/autoload/; default/'</span>);</code></span>
这里再次提醒一下,类的名字和文件的名字必须相同,这样autoload才可以一下从文件读到类里面。而且f3是不区分大小写的,所以最好不要用同名的文件夹和文件。


下面要说说怎么读取一个路径的文件:

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

首先我们定义的根目录是/var/www/html/,然后

<span style="font-size:18px"><code style="padding:0px; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; font-size:12px; color:inherit; background-color:transparent; border:0px; word-wrap:break-word"><span class="variable" style="color:rgb(58,135,173)">$f3</span><span class="object_operator" style="color:black">-></span><span class="string" style="color:black">set</span>(<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'AUTOLOAD'</span>,<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'autoload/'</span>);<span class="whitespace"></span><span class="variable" style="color:rgb(58,135,173)">$obj</span>=<span class="new" style="color:rgb(255,20,147)">new</span><span class="whitespace"> </span><span class="string" style="color:black">Gadgets</span><span class="ns_separator" style="color:rgb(178,34,34)">\</span><span class="string" style="color:black">iPad</span>;</code></span>

还有文件里面的定义是:

<span style="font-size:18px"><code style="padding:0px; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; font-size:12px; color:inherit; background-color:transparent; border:0px; word-wrap:break-word"><span class="namespace" style="color:rgb(255,20,147)">namespace</span><span class="whitespace"> </span><span class="string" style="color:black">Gadgets</span>;<span class="whitespace"></span><span class="class" style="color:rgb(255,20,147)">class</span><span class="whitespace"> </span><span class="string" style="color:black">iPad</span><span class="whitespace"> </span>{}</code></span>

里面的Gadgets自然是与路径的一样的了,主要是方便autoload来识别,毕竟框架不区分大小写。还要注意的是,这些路径都要以斜杠/结尾:

<span style="font-size:18px"><code style="padding:0px; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; font-size:12px; color:inherit; background-color:transparent; border:0px; word-wrap:break-word"><span class="variable" style="color:rgb(58,135,173)">$f3</span><span class="object_operator" style="color:black">-></span><span class="string" style="color:black">set</span>(<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'AUTOLOAD'</span>,<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'main/;aux/'</span>);</code></span>
在讲下面这个概念之前我要先讲一下静态和动态函数:

静态函数:程序结束的时候才会消失,一直占用内存等待调用,不需要类的实例化就能使用。

动态函数:动态加载到内存中,不需要的时候就自动free,但是必须要先new一个类才能在类中被调用。

从字面上理解就是如果你只要这个函数并且要常用,用静态,如果你要整个类的函数都涉及到调用,动态的


继续讲:

F3里面的静态和动态方法是怎么调用的呢

静态:

<span style="font-size:18px"><code style="padding:0px; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; font-size:12px; color:inherit; background-color:transparent; border:0px; word-wrap:break-word"><span class="variable" style="color:rgb(58,135,173)">$f3</span><span class="object_operator" style="color:black">-></span><span class="string" style="color:black">set</span>(<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'AUTOLOAD'</span>,<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'classes/'</span>);<span class="whitespace"></span><span class="variable" style="color:rgb(58,135,173)">$f3</span><span class="object_operator" style="color:black">-></span><span class="string" style="color:black">route</span>(<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'GET|POST /'</span>,<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'Main\Home::show'</span>);</code></span>
动态:

<span style="font-size:18px"><code style="padding:0px; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; font-size:12px; color:inherit; background-color:transparent; border:0px; word-wrap:break-word"><span class="variable" style="color:rgb(58,135,173)">$f3</span><span class="object_operator" style="color:black">-></span><span class="string" style="color:black">route</span>(<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'GET|POST /'</span>,<span class="constant_encapsed_string" style="color:rgb(178,34,34)">'Main\Home->show'</span>);</code></span>
classes/main/home.php都是里面有个叫Main的namespace的,这就不详细说了。这里就是动态静态调用show函数了

























Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn