tp5博客項目實戰
開發准備:環境wamp,windows系統為例。看實戰博客,默認會搭建開發環境並且tp5框架已經至少有一定的基礎。
tp5的下載與安裝
方法一:直接在官網下載拷貝到wamp你的項目目錄。
方法二:下載安裝 composer,打開cmd 打開到你項目的根目錄
更換阿里雲的鏡像(下載速度快)
composer config -g repo.packagist composer https://packagist.phpcomposer.com
下載
composer create-project topthink/think=5.0.* tp5 --prefer-dist
此時你所在項目的根目錄下就出現了tp5的文件夾
在瀏覽器打開localhost/你的站點/tp5/public
出現
十年磨一劍...就說明安裝成功。
命名空間
同一個php里面不能出現相同的兩個函數這個時候就需要用到namespace例如這樣兩個相同名稱的函數因為放到了兩個不同的命名空間所以不會報錯。這就像同一個文件夾里不能出現兩個一樣名稱的文件,我們在這個文件夾里面建兩個子文件夾把文件分別放進去就可以了。
命名空間只對函數,類,以及常量起作用且常量不是define定義的。
const定義的常量一般在類里面,命名空間可以使其在類外面
引入了namespace的php前面,在namespace前面不能有任何字符。
<?php
namespace kj1;
function getmsg(){
echo '123';
}
const mn='chenguosong';
namespace kj2;
function getmsg(){
echo 'hello';
}
const mn='chenjialei';
那么怎么找到並使用你想要的那個函數呢?
\kj1\getmsg();
echo '<br/>'.\kj1\mn;
函數可以在空間之前調用,例如這樣
<?php
namespace kj1;
function getmsg(){
echo '123';
}
const mn='chenguosong';
\kj2\getmsg();
namespace kj2;
function getmsg(){
echo 'hello';
}
const mn='chenjialei';
不過常量不行
多級命名空間
像這樣
namespace beijing\haidian;
三種訪問方式
1.非限定名稱訪問方式
就是直接使用當前命名空間的方法
namespace kj2;
function getmsg(){
echo 'hello';
}
getmsg();
2.限定名稱訪問方式
beijing\haidian\getmsg();
namespace shanghai\putuoqu\beijing\haidian;
function getmsg(){
echo 'hehe';
}
3.完全限定訪問名稱方式
\beijing\haidian\getmsg();
命名空間的引入機制
空間引入
use beijing\haidian\tiananmen;//引入命名空間
如果要使用空間里面的東西,要用 限定名稱訪問方式而不能直接用非限定性名稱訪問方式
例如這樣
tiananmen\getmsg();//命名空間里的方法的使用
$animal=new tiananmen\animals();
echo $animal->obj;//類的方法
echo tiananmen\animals::$name;//靜態常量的訪問
引入類元素
use beijing\haidian\tiananmen\animals;//這樣就相當於把上一個命名空間的類animals復制了一份到當前的命名空間,可以直接使用,就像使用當前命名空間的類一樣。注意,拷貝了一份就得把當前同名稱的類給刪除。
echo animals::$name;
$sub=new animals();
echo $sub->obj;
這樣就不用像前面的引入命名空間那樣每一個使用都要用 限定名稱訪問方式。
公共空間
命名空間引入公共空間
沒有限定命名空間的php就是公共空間例如有下面兩個php
2.php
<?php
function getmsg(){
echo "上海普陀";
}
const NM="陳國松";
1.php
<?php
namespace beijing;
header("content-type:text/html;charset=utf-8");
class animals{
public $obj='dog';
static $name='大黃';
}
function getmsg(){
echo '北京海淀';
}
include("./2.php");//引入公共空間
getmsg();//使用這個方法打印輸出的是 北京海淀 而不是 上海普陀 說明引入的公共空間對當前命名空間是沒有影響的,只有你要使用的方法在當前找不到,才會去公共空間尋找
使用公共空間的常量和方法
include("./2.php");
echo \NM;//如果當前的空間沒有這個常量而公共空間有的話也可以直接這樣echo NM
\getmsg();
公共空間引入命名空間
<?php
function getmsg(){
echo "上海普陀";
}
const NM="陳國松";
include("./1.php");
echo NM;//訪問的還是當前的NM
echo \NM;//訪問的是當前的NM
echo \beijing\NM;//訪問命名空間里面的NM
tp5里面命名空間的使用案例
例如application下面的index下的controller
命名空間是虛擬的文件目錄,是不存在的,但在tp5里面用app/index/controller對應到實際的方便開發
<?php
namespace app\index\controller;
class Index
{
public function index()
{
return 'hello';
}
}
fetch方法在thinkphp/library/think/Controller
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
return $this->fetch();
}
}
這樣index.php就可以使用fetch方法了