TP框架学习笔记第三天

此文章为自己书写,在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只能声明一个同名称的常量。
这里写图片描述
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处于公共空间)
这里写图片描述
1.6命名空间使用注意
(1)声明命名空间的当前脚本的第一个namespace关键字前面不能有任何代码(header头代码也要写在下面,但是可以有注释)
(2)命名空间是虚拟抽象的空间,不是真实存在的目录
(3)相同请求的不同文件的同名空间里边不能有同名元素
有许多文件可以使用同名称的命名空间
如果一个请求把他们都引入进来了,则他们的同类型元素不能出现多个同名称的
1.7TP框架验证码的使用
这里写图片描述
在页面中显示验证码:
这里写图片描述
验证码验证:
这里写图片描述
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(临时路径名附件,真实路径名附件)

显示上传的附件信息:
这里写图片描述
上传附件处理:
这里写图片描述
3.制作缩略图
涉及技术点:
打开一个已有图片:imagecreatejpeg() imagecreatefrompng() imagecreatefromtruecolor();
创建一个目标图片:imagecreatetruecolor()
对一个图片的一部分进行缩放处理:imagecopyresampled();
在Controller里面制作缩略图:
这里写图片描述
在index.php中定义常量:
这里写图片描述
在视图中展示缩略图:
这里写图片描述
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;
    }
}  

控制器中用分页实现分页效果:
这里写图片描述
5.实现登录功能
管理员控制器实现登录验证:
这里写图片描述
管理员模型实现用户名与密码验证:
这里写图片描述
退出登录(将session信息失效):
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值