TP框架学习笔记第三天

时间:2021-01-20 20:55:32

此文章为自己书写,在Word上做的笔记,然后拷贝到这上边的,无任何抄袭。另外若是程序有任何问题可以评论,也可私信我。
若是想看整个学习笔记代码和数据库可点击此处(包含个人书写的项目代码及数据库文件)。

第三天概述

1.命名空间
(1)声明、多级空间、访问元素
(2)引入(空间、类元素、别名)
(3)公共空间
2.验证码、附件上传、缩略图
3.给tp框架自定义工具类

1.命名空间

1.1什么是命名空间
在php程序语言中,语法规则要求同名称的函数、类名、常量在一个请求里边不允许出现多次。如果有的应用程序不得已必须出现多个同名的函数、类名、常量,那么我们可以把它们放到不同的空间中做请求。这个不同的空间就是命名空间。
1.2.使用命名空间
通过namespace关键字声明命名空间。
namespace 命名空间名称;
命名空间针对函数、类名、常量三部分起作用,并统称为“元素”。
常量的声明:
define(名称,值); //(在类外部声明常量)与命名空间没有关系
const 名称=值; //与命名空间有关系
(1)const可以在类的内部声明常量信息(类常量)
(2)const也可以在类的外部声明常量信息(正常常量)
const和define的区别:
前者针对命名空间发生影响,后者不发生影响。
const可以声明多个同名称的的常量。
define只能声明一个同名称的常量。
TP框架学习笔记第三天
1.3子级(多级)命名空间
命名空间可以让我们存放许多元素(函数、类、常量),有的时候元素比较多,为了方便管理,可以对元素进行分门别类的存储。也就是说命名空间可以设置为多级空间。多级空间的最后一级空间就称为“子级空间”。
1.3.1空间访问元素的三种形式
(1)非限定性名称
echo Animal:: name;//访Animalphpincludecommon.php;2echobeijing\Animal:: name; //把当前空间和beijing空间联合获得Animal元素
类似于php引入文件:include “Common/Conf/config.php”; 相对路径
(3)完全限定名称
echo \beijing\Animal: name;//访beijingAnimalphpincluded:/web/1121/Conf/config.php1.4访便使1.4.1use\beijing; std = new beijing\Student();
1.4.2引入类元素
use \beijing\Student;
$std = new Student();
1.4.2.1别名使用
use 空间\元素 as 别名;
把其他空间的一个“类元素”引入到当前空间,如果当前空间也有一个“同名”的类元素,则引入元素与当前空间元素就会有冲突,为了避免冲突的发生,可以为引入空间元素起一个别名。
1.5公共空间
一个php文件中没有namespace关键字声明,则该文件的元素都存在于“公共空间”。
访问公共空间的元素统一设置为\元素;
举例子:
两个文件 a.php b.php(a.php include引入b.php)
1.a.php中有namespace而b.php没有(b.php处于公共空间)
通过“非限定性名称”访问一个元素:
(1)首先获得本空间元素
(2)其次获得公共空间元素
被引入的文件空间针对当前空间不发生影响。
2.a.php没有namespace,而b.php又namespace(a.php处于公共空间)
TP框架学习笔记第三天
1.6命名空间使用注意
(1)声明命名空间的当前脚本的第一个namespace关键字前面不能有任何代码(header头代码也要写在下面,但是可以有注释)
(2)命名空间是虚拟抽象的空间,不是真实存在的目录
(3)相同请求的不同文件的同名空间里边不能有同名元素
有许多文件可以使用同名称的命名空间
如果一个请求把他们都引入进来了,则他们的同类型元素不能出现多个同名称的
1.7TP框架验证码的使用
TP框架学习笔记第三天
在页面中显示验证码:
TP框架学习笔记第三天
验证码验证:
TP框架学习笔记第三天
2.附件上传(图片上传)
涉及技术点:

    <form enctype="multipart/form-data">
<input type="file">
</form>
$_FILES接收附件信息
name size tmp_name type error(error:0没有问题1,2大小超限制3只上传部分文件4没有上传附件)
move_uploaded_file(临时路径名附件,真实路径名附件)

显示上传的附件信息:
TP框架学习笔记第三天
上传附件处理:
TP框架学习笔记第三天
3.制作缩略图
涉及技术点:
打开一个已有图片:imagecreatejpeg() imagecreatefrompng() imagecreatefromtruecolor();
创建一个目标图片:imagecreatetruecolor()
对一个图片的一部分进行缩放处理:imagecopyresampled();
在Controller里面制作缩略图:
TP框架学习笔记第三天
在index.php中定义常量:
TP框架学习笔记第三天
在视图中展示缩略图:
TP框架学习笔记第三天
4.数据分页(自定义工具类)
自定义分页工具类。
分页类的代码:

<?php
//Tools名称与上级目录一致,该类文件在做自动加载的时候,Tools名称会转化为目录的一部分
//进而include引入当前文件
namespace Tools;
class Page{
private $total;//数据表中总记录数
private $listRows;//每页显示的行数
private $limit;//每页限制的数量
private $uri;//第n页
private $pageNum;//页数
private $config = array('header'=>'个记录','prev'=>'上一页','next'=>'下一页','first'=>'首 页','last'=>'尾 页');
private $listNum = 8;//页码列表数目
private $page;
public function __construct($total,$listRows=10,$pa = ""){
$this->total=$total;
$this->listRows = $listRows;
$this->uri = $this->getUri($pa);
$this->page=!empty($_GET["page"])?$_GET["page"]:1;
$this->pageNum=ceil($this->total/$this->listRows);
$this->limit = $this->setLimit();
}
private function setLimit(){
return "limit ".($this->page-1)*$this->listRows.",{$this->listRows}";
}

private function getUri($pa){
$url = $_SERVER["REQUEST_URI"].(strpos($_SERVER['REQUEST_URI'], '?')?'':'?').$pa;
$parse = parse_url($url);
if(isset($parse["query"])){
parse_str($parse['query'],$params);
unset($params["page"]);
$url = $parse['path']."?".http_build_query($params);
}
return $url;
}
function __get($args){
if($args=="limit")
return $this->limit;
else
return null;
}
private function start(){
if($this->total==0)
return 0;
else
return ($this->page-1)*$this->listRows+1;
}
private function end(){
return min($this->page*$this->listRows,$this->total);
}
private function first(){
$html = "";
if($this->page==1)
$html.='';
else
$html.="&nbsp;&nbsp;<a href='{$this->uri}&page=1'>{$this->config["first"]}</a>&nbsp;&nbsp;";
return $html;
}
private function prev(){
$html = "";
if($this->page==1)
$html.="";
else
$html.="&nbsp;&nbsp;<a href='{$this->uri}&page=".($this->page-1)."'>{$this->config["prev"]}</a>&nbsp;&nbsp;";
return $html;
}
private function pageList(){
$linkPage = "";

$inum = floor($this->listNum/2);

for($i=$inum;$i>=1;$i--){
$page = $this->page-$i;
if($page<1)
continue;
$linkPage .= "&nbsp;&nbsp;<a href='{$this->uri}&page={$page}'>{$page}</a>&nbsp;&nbsp;";
}
$linkPage.="&nbsp;&nbsp;{$this->page}&nbsp;&nbsp;";
for($i=1;$i<=$inum;$i++){
$page = $this->page+$i;
if($page<=$this->pageNum)
$linkPage.="&nbsp;&nbsp;<a href='{$this->uri}&page={$page}'>{$page}</a>&nbsp;&nbsp;";
else
break;

}
return $linkPage;
}
private function next(){
$html="";
if($this->page==$this->pageNum)
$html.="";
else
$html .= "&nbsp;&nbsp;<a href='{$this->uri}&page=".($this->page+1)."'>{$this->config['next']}</a>&nbsp;&nbsp;";
return $html;
}
private function last(){
$html="";
if($this->page==$this->pageNum)
$html.="";
else
$html .= "&nbsp;&nbsp;<a href='{$this->uri}&page=".($this->pageNum)."'>{$this->config['last']}</a>&nbsp;&nbsp;";
return $html;
}
private function goPage(){
return '&nbsp;&nbsp;<input type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>' . $this->pageNum . ')?' . $this->pageNum . ':this.value;location=\'' . $this->uri . '&page=\'+page+\'\'}" value="' . $this->page . '" style="width:25px"><input type="button" value="GO" onclick="javascript:var page=(this.previousSibling.value>' . $this->pageNum . ')?' . $this->pageNum . ':this.previousSibling.value;location=\'' . $this->uri . '&page=\'+page+\'\'">&nbsp;&nbsp;';
}
function fpage($display = array(0, 1, 2, 3, 4, 5, 6, 7, 8)) {
$html[0] = "&nbsp;&nbsp;共有<b>{$this->total}</b>{$this->config["header"]}&nbsp;&nbsp;";
$html[1] = "&nbsp;&nbsp;每页显示<b>" . ($this->end() - $this->start() + 1) . "</b>条,本页<b>{$this->start()}-{$this->end()}</b>条&nbsp;&nbsp;";
$html[2] = "&nbsp;&nbsp;<b>{$this->page}/{$this->pageNum}</b>页&nbsp;&nbsp;";
$html[3] = $this->first();
$html[4] = $this->prev();
$html[5] = $this->pageList();
$html[6] = $this->next();
$html[7] = $this->last();
$html[8] = $this->goPage();
$fpage = '';
foreach ($display as $index) {
$fpage.=$html[$index];
}
return $fpage;
}
}

控制器中用分页实现分页效果:
TP框架学习笔记第三天
5.实现登录功能
管理员控制器实现登录验证:
TP框架学习笔记第三天
管理员模型实现用户名与密码验证:
TP框架学习笔记第三天
退出登录(将session信息失效):
TP框架学习笔记第三天