10.12 php,自定义错误类-----2019-10-12

本文档展示了如何自定义错误提示类`file_upload_error`,该类继承自`Exception`,用于处理文件上传过程中的错误。接着,通过PHP实现了一个文件上传功能,包括检查文件类型、大小等,并在出错时抛出自定义异常。同时,创建了一个与数据表绑定的`staff`类,实现了基本的数据库操作,如查询、新增和更新员工记录。在查询时,可以直接调用类属性输出数据。
摘要由CSDN通过智能技术生成

namespace _1012task1;

// 1.自定义错误提示

use Exception;

class file_upload_error extends Exception

{

public function __construct($message="",$code=0)

{

parent:: __construct($message,$code);

$this->errorInfo();

}

public function errorInfo()

{   // heredoc:用来输出大段的html代码或字符,中间允许变量存在

return <<

{$this->getCode()}:

{$this->getMessage()}

ERROR;

}

}

try

{

// 2.文件上传处理

// 配置上传参数

// 允许文件上传的类型

$fileType=['jpg','gif','png','jpeg'];

// 允许设置上传文件的最大长度

$fileSize = 3145728;

// 上传到服务器上指定的目录

$filePath = '/upload/';

// 原始文件名

$fileName = $_FILES['my_file']['name'];

// 上传到服务器上的临时文件名

$tempFile = $_FILES['my_file']['tmp_name'];

// print_r($_FILES['my_file']);

// exit;

// 3.判断文件上传是否成功

$uploadError = $_FILES['my_file']['error'];

if ($uploadError>0)

{

switch ($uploadError)

{

case 1: throw new file_upload_error('上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值',1000);

// case 2: die((new file_upload_error('上传文件大小不能超过3M',1001))->errorInfo());

case 2: throw new file_upload_error('上传文件大小不能超过3M',1001);

// case 3: die((new file_upload_error('上传文件不完整',1002))->errorInfo());

case 3: throw new file_upload_error('上传文件不完整',1002);

// case 4: die((new file_upload_error('文件上传为空',1003))->errorInfo());

case 4: throw new file_upload_error('文件上传为空',1003);

// case 6: die((new file_upload_error('找不到临时文件',1004))->errorInfo());

case 6: throw new file_upload_error('找不到临时文件',1004);

// case 7:die((new file_upload_error('文件写入失败',1005))->errorInfo());

case 7: throw new file_upload_error('文件写入失败',1005);

// default: die((new file_upload_error('未知错误',1006))->errorInfo());

default: throw new file_upload_error('未知错误',1006);

}

}

//判断文件大小

$file_size=$_FILES['my_file']['size'];

if ($file_size>$fileSize)

{

throw new file_upload_error('上传文件大小不能超过3M',1001);

}

// 4.判断上传文件格式是否正确

$extensions = explode('.',$fileName);

$extension = end($extensions);

if(!in_array($extension,$fileType))

{

// die(((new file_upload_error('文件格式错误,不允许上传'.$extension.'文件类型',1007)))->errorInfo()) ;

throw new file_upload_error('文件格式错误,不允许上传'.$extension.'文件类型',1007);

}

//5.为了防止同名覆盖, 将上传的文件重命名:命名格式md5+时间戳

$fileName = date('Ymdhis',time()).md5(mt_rand(1,99)).'.'.$extension;

//6.文件上传

if (is_uploaded_file($tempFile))

{

if (move_uploaded_file($tempFile,__DIR__.$filePath.$fileName))

{

echo '';

}

else

{

// die((up_load_error('文件无法移动到制定目录,请检查目录权限',1008))->errorInfo());

throw new file_upload_error('文件无法移动到制定目录,请检查目录权限',1008);

}

}

else

{

// die((new file_upload_error('非法操作',1009))->errorInfo());

throw new file_upload_error('非法操作',1009);

}

}

catch(Exception $e)

{

echo $e->errorInfo();

echo '
';

}

运行结果:

b979b392cf93569a5b184f902de917d0.png

2771e6a1e10a6f5e29dcb781743499be.png

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

实例

namespace _1012task2;

use PDO;

interface iDB{

const dsn='mysql:host=127.0.0.1;dbname=video';

const user='root';

const pwd = 'root';

}

class staff implements iDB{

protected $staff_id;

protected $name;

protected $age;

protected $sex;

protected $position;

protected $mobile;

protected $hiredate;

protected $pdo=null;

protected $table= 'staff';

protected $results;

public function __get($name){

return $this->$name;

}

public function __set($name,$value){

return $this->$name=$value ;

}

public function __construct(){

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

$this->hiredate=date('Y-m-d',$this->hiredate);

$this->pdo=new PDO(iDB::dsn,iDB::user,iDB::pwd);

}

//查询

public function select($field=' * ',$where=''){

$field=empty($field) ? ' * ' : $field;

$where=empty($where) ? '' : ' WHERE '.$where;

$sql = ' SELECT '.$field.' FROM '.$this->table.$where;

$stmt = $this->pdo->prepare($sql);

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

$stmt->execute();

$this->results=$stmt->fetchAll();

}

// 新增

public function insert($data){

$fields=' (name, age, sex, position, mobile, hiredate) ';

$values=' (:name, :age, :sex, :position, :mobie, :hiredate)';

$sql = 'INSERT INTO '.$this->table.$fields.' VALUES '.$values;

$stmt=$this->pdo->prepare($sql);

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

if($stmt->execute($data)){

if($stmt->rowcount()>0){

return '插入了'.$stmt->rowcount().'条数据,最后插入的数据主键为:'.$this->pdo->lastInsertId();

}else{

die('

'.print_r($stmt->errorInfo(),true));

}

}

}

// 修改

public function updata($data,$where){

$ketArray = array_keys($data);

$set = '';

foreach($ketArray as $kvalue){

$set.=$kvalue .' = :'.$kvalue.', ';

}

$set = rtrim($set,', ');

if(!empty($where)){

$where = ' WHERE '.$where;

$set = rtrim($set,', ');      //删除$set值最右侧的空格与预定的', '字符

$sql = ' UPDATE ' . $this->table. ' SET ' .$set.$where;     //sql语句拼接

$stmt = $this->pdo->prepare($sql);      //预处理

$stmt->execute($data);      //绑定参数并执行

return $stmt->rowCount();

}else{

return '不允许无条件更新。';

}

}

}

$staff=new staff();

$staff->select();

foreach($staff->results as $staff){

echo "

{$staff->staff_id}--- "{$staff->name}---{$staff->sex}---{$staff->hiredate}";

}

$staff->name='James';

$staff->age=30;

echo "$staff->name---$staff->age";

?>

运行结果:

b26f4f7c6472bca2bf3203a1a1d17758.png

总结:

1、在自定义错误类的时候需要从系统Exception类进行继承,并且子类只能改写父类的__construct()构造方法和errorInfo()方法;不能修改其他方法,在错误接收时,父类Exception可以接收子类抛出的错误内容和样式。

2、类绑定数据表需要根据数据表字段来设置类的属性,在查询的时候,查询结果可以直接调用类的属性来输出想要的数据,查询的时候不需要设置字段,可以再输出的时候在根据自己想要的结果输出;在增加、修改和删除数据方面和未绑定数据表的类相比好像没有优势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值