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

WBOY
Release: 2016-06-13 11:53:12
Original
1561 people have browsed it

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>
Copy after login
然后就会自动进入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>
Copy after login
在浏览器地址栏显示的是“/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>
Copy after login

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>
Copy after login
这个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>
Copy after login
这里再次提醒一下,类的名字和文件的名字必须相同,这样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>
Copy after login

还有文件里面的定义是:

<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>
Copy after login

里面的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>
Copy after login
在讲下面这个概念之前我要先讲一下静态和动态函数:

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

动态函数:动态加载到内存中,不需要的时候就自动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>
Copy after login
动态:

<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>
Copy after login
classes/main/home.php都是里面有个叫Main的namespace的,这就不详细说了。这里就是动态静态调用show函数了

























Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template