Blogger Information
Blog 26
fans 0
comment 3
visits 19626
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
自定义异常类来处理上传过程以及各种错误与模型类与数据表绑定_1012
西门吃雪
Original
781 people have browsed it

10月12日作业:

1.写一个自定义异常类来处理上传过程以及各种错误

2.(选做) 写一个与指定数据表绑定的类, 实现基本的模型功能,例如查询, 新增, 更新,删除等

课堂笔记

in_array — 检查数组中是否存在某个值

array_shift — 将数组开头的单元移出数组

is_numeric — 检测变量是否为数字或数字字符串 

count — 计算数组中的单元数目,或对象中的属性个数    

// 异常进行错误的统一处理

// 异常类是php中专用于错误 信息的统一处理

use Exception;

Exception;是系统内置的函数


// Exception 类是可以进行扩展的

// Exception 中只有__construct()和__toString()允许扩展,其它都是最终方法final,不允许扩展

// 下面我们来创建一个自己的异常类, 专用于处理算术运算中可能出现的错误

// 基本要求是: 错误代码加粗, 提示文本描红, 并要求换行显示

Exception的使用方式

throw new Exception ('操作符错误',101);



首先做一个upload.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
<!--请求类型必须是: post-->
<!--数据编码类型: 使用复合类型,通知服务器上传的是文件类型-->
<form action="uploads.php" method="post" enctype="multipart/form-data">
    <input type="file" name="my_file" id="">
    <input type="hidden" name="MAX_FILE_SIZE" value="3145728">
    <button>上传</button>
</form>
</body>
</html>

然后upload.php

<?php 


namespace _1012_4;
// 异常进行错误的统一处理
// 异常类是php中专用于错误 信息的统一处理
use Exception;


// 将系统的异常类进行扩展,自定义
class CalException extends Exception
{
    public function __construct($message = "", $code = 0)
    {
        parent::__construct($message, $code);
    }

    // 自定义错误提示信息
    public function errorInfo()
    {
        //heredoc: 用来输出大段的html代码或字符中, 并且中间允许有变量且会解析
        return <<< "ERROR"
        <h2>
        <strong>{$this->getCode()}: </strong>
        <span style="color: red;">{$this->getMessage()}</span>
        </h2>
        ERROR;
    }
}



try {
    //1、配置上传参数
    //允许上传类型
    $fileType = ['image/jpeg', 'image/jpg', 'image/pjpeg', 'image/gif', 'image/png'];
    //允许上传的文件最大长度
    $fileSize = 3145728;
    //上传到服务器上的指定的目录
    $filePath = '/uploads/';
    //原始的文件名
    $fileName = $_FILES['my_file']['name'];
    //上传到服务器上的临时文件名
    $tempFile = $_FILES['my_file']['tmp_name'];

    //2、判断文件市府上传成功
    //$_FILES['my_file']['error'], 0表示成功,大于1表示失败
    $uploadError = $_FILES['my_file']['error'];
    if ($uploadError>0){
        switch($uploadError){
            case 1:
            case 2: throw new CalException('上传文件超过3M', 101);
            case 3: throw new CalException('上传文件不完整', 102);
            case 4: throw new CalException('没有文件被上传', 103);
            default: throw new CalException('未知错误', 104);
        }
    }

    //3、判断文件扩展名是否正确
    //pathinfo(文件名,返回数组元素) ; PATHINFO_EXTENSION,返回类型
    $extension = pathinfo($fileName, PATHINFO_EXTENSION);
    if ( !in_array($_FILES['my_file']['type'], $fileType) ){
        //die('不允许上传 ' . $extension . ' 文件类型');
        throw new CalException('不允许上传 ' . $extension . ' 文件类型', 105);
    }

    //4、为了防止同盟覆盖,将上传的文件重命名
    $fileName = date('YmdHis',time()).md5(mt_rand(1,99)). '.' .$extension;

    //5、上传文件
    if(is_uploaded_file($tempFile)){
        if(move_uploaded_file($tempFile, __DIR__ . $filePath.$fileName)){
            echo '<script>alert("上传成功");history.back();</script>';
        }else{
            //die('非法操作');
            throw new CalException('非法操作', 106);
        }
    }

    exit();
} catch (CalException $e) {
    echo $e->errorInfo();
}














 ?>


运行效果图

QQ截图20191022000257.jpg

 写一个与指定数据表绑定的类, 实现基本的模型功能,例如查询, 新增, 更新,删除等

<?php 

//框架中的模型通常是与一张数据表进行关联
// 实现了类 到 数据表的映射
namespace _1012_6;

use PDO;
// 类名与表名必须对应

class Staff
{
    // 属性与表中的字段对应
    private $staff_id;
    private $name;
    private $age;
    private $sex;
    private $position;
    private $hiredate;

    // 属性重载
    public function __get($name)
    {
        return $this->$name;
    }

    public function __set($name, $value)
    {
        $this->$name = $value;
    }

    // 构造方法
    public function __construct()
    {
        $this->hiredate = date('Y/m/d',$this->hiredate);

        $this->sex = $this->sex ? '男' : '女';
    }
}



$pdo = new PDO('mysql:dbname=php','root','123456');
$stmt = $pdo->prepare('SELECT * FROM `staff`');

$stmt->setFetchMode(PDO::FETCH_CLASS, Staff::class);

$stmt->execute();

while($staff = $stmt->fetch()) {
	echo "<li>{$staff->staff_id}: {$staff->name}---{$staff->position}<li>";
}











 ?>


Correction status:qualified

Teacher's comments:任何一门语言, 都有对异常的处理, 而且思路是类似的
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
1 comments
嘿哈 2019-10-26 23:18:52
博主qq多少?
1 floor
Author's latest blog post