PHP常用的类封装小结【4个工具类】

2025-05-29 0 36

本文实例讲述了PHP常用的类封装。分享给大家供大家参考,具体如下:

这4个类分别是Mysql类、 分页类、缩略图类、上传类。

Mysql类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109
<?php

/**

* Mysql类

*/

class Mysql{

private static $link = null;//数据库连接

/**

* 私有的构造方法

*/

private function __construct(){}

/**

* 连接数据库

* @return obj 资源对象

*/

private static function conn(){

if(self::$link === null){

$cfg = require './config.php';

self::$link = new Mysqli($cfg['host'],$cfg['user'],$cfg['pwd'],$cfg['db']);

self::query("set names ".$cfg['charset']);//设置字符集

}

return self::$link;

}

/**

* 执行一条sql语句

* @param str $sql 查询语句

* @return obj 结果集对象

*/

public static function query($sql){

return self::conn()->query($sql);

}

/**

* 获取多行数据

* @param str $sql 查询语句

* @return arr 多行数据

*/

public static function getAll($sql){

$data = array();

$res = self::query($sql);

while($row = $res->fetch_assoc()){

$data[] = $row;

}

return $data;

}

/**

* 获取一行数据

* @param str $row 查询语句

* @return arr 单行数据

*/

public static function getRow($row){

$res = self::query($sql);

return $res->fetch_assoc();

}

/**

* 获取单个结果

* @param str $sql 查询语句

* @return str 单个结果

*/

public static function getOne($sql){

$res = self::query($sql);

$data = $res->fetch_row();

return $data[0];

}

/**

* 插入/更新数据

* @param str $table 表名

* @param arr $data 插入/更新的数据

* @param str $act insert/update

* @param str $where 更新条件

* @return bool 插入/更新是否成功

*/

public static function exec($table,$data,$act='insert',$where='0'){

//插入操作

if($act == 'insert'){

$sql = 'insert into '.$table;

$sql .= ' ('.implode(',',array_keys($data)).')';

$sql .= " values ('".implode("','",array_values($data))."')";

}else if($act == 'update'){

$sql = 'update '.$table.' set ';

foreach ($data as $k => $v) {

$sql .= $k.'='."'$v',";

}

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

$sql .= ' where 1 and '.$where;

}

return self::query($sql);

}

/**

* 获取最近一次插入的主键值

* @return int 主键

*/

public static function getLastId(){

return self::conn()->insert_id;

}

/**

* 获取最近一次操作影响的行数

* @return int 影响的行数

*/

public static function getAffectedRows(){

return self::conn()->affected_rows;

}

/**

* 关闭数据库连接

* @return bool 是否关闭

*/

public static function close(){

return self::conn()->close();

}

}

?>

分页类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55
<?php

/**

* 分页类

* @author webbc

*/

class Page{

private $num;//总的文章数

private $cnt;//每页显示的文章数

private $curr;//当前的页码数

private $p = 'page';//分页参数名

private $pageCnt = 5;//分栏总共显示的页数

private $firstRow;//每页的第一行数据

private $pageIndex = array();//分页信息

/**

* 构造函数

* @param int $num 总的文章数

* @param int $cnt 每页显示的文章数

*/

public function __construct($num,$cnt=10){

$this->num = $num;

$this->cnt = $cnt;

$this->curr = empty($_GET[$this->p]) ? 1 : intval($_GET[$this->p]);

$this->curr = $this->curr > 0 ? $this->curr : 1;

$this->firstRow = $this->cnt * ($this->curr - 1);

$this->getPage();

}

/**

* 分页方法

*/

private function getPage(){

$page = ceil($this->num / $this->cnt);//总的页数

$left = max(1,$this->curr - floor($this->pageCnt/2));//计算最左边页码

$right = min($left + $this->pageCnt - 1 ,$page);//计算最右边页码

$left = max(1,$right - ($this->pageCnt - 1));//当前页码往右靠,需要重新计算左边页面的值

for($i=$left;$i<=$right;$i++){

if($i == 1){

$index = '第1页';

}else if($i == $page){

$index = '最后一页';

}else{

$index = '第'.$i.'页';

}

$_GET['page'] = $i;

$this->pageIndex[$index] = http_build_query($_GET);

}

}

/**

* 返回分页信息数据

* @return [type] [description]

*/

public function show(){

return $this->pageIndex;

}

}

?>

缩略图类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118
<?php

/**

* 缩略图类

* @author webbc

*/

class Thumb{

private $thumbWidth;//缩略图的宽

private $thumbHeight;//缩略图的高

private $thumbPath;//缩略图保存的路径

private $sourcePath;//原图的路径

private $sourceWidth;//原图的宽度

private $sourceHeight;//原图的高度

private $sourceType;//原图的图片类型

/**

* 构造函数

* @param str $sourcePath 原图的绝对路径

* @param integer $thumbWidth 缩略图的宽

* @param integer $thumbHeight 缩略图的高

*/

public function __construct($sourcePath,$thumbWidth=200,$thumbHeight=200){

//获取原图的绝对路径

$this->sourcePath = $sourcePath;

//获取缩略图的大小

$this->thumbWidth = $thumbWidth;

$this->thumbHeight = $thumbHeight;

$this->thumbPath = $this->getThumbPath();

//计算大图的大小

list($this->sourceWidth,$this->sourceHeight,$this->sourceType) = getimagesize($this->sourcePath);

}

/**

* 确定缩略图保存的路径

* @return [type] [description]

*/

private function getThumbPath(){

$ext = $this->getExt();

$filename = basename($this->sourcePath,'.'.$ext).'_thumb'.'.'.$ext;

return $thumbPath = __DIR__.'/'.$filename;

}

/**

* 获取原图的扩展名

* @return str 扩展名

*/

private function getExt(){

return pathinfo($this->sourcePath,PATHINFO_EXTENSION);

}

/**

* 检测原图的扩展名是否合法,并返回相应类型

* @return bool/str 原图的类型

*/

public function getType(){

$typeArr = array(

1 => 'gif',

2 => 'jpeg',

3 => 'png',

15 => 'wbmp'

);

if(!in_array($this->sourceType, array_keys($typeArr))){

return false;

}

return $typeArr[$this->sourceType];

}

/**

* 按照缩略图大小,计算大图的缩放比例

* @return float 缩放比例

*/

public function calculateRate(){

return min($this->thumbWidth / $this->sourceWidth,$this->thumbHeight / $this->sourceHeight);

}

/**

* 计算大图按照缩放比例后,最终的图像大小

* @param float $rate 缩放比例

* @return arr 缩放后的图片大小

*/

public function getImageSizeByRate($rate){

$width = $this->sourceWidth * $rate;

$height = $this->sourceHeight * $rate;

return array('w'=>$width,'h'=>$height);

}

/**

* 保存成文件

* @return [type] [description]

*/

public function saveFile($image){

$method = "image".$this->getType();

$method($image,$this->thumbPath);

}

/**

* 进行绘画操作

* @return [type] [description]

*/

public function draw(){

if(!($type = $this->getType())){

echo "文件类型不支持";

return ;

}

//创建大图和小图的画布

$method = "imagecreatefrom".$type;

$bigCanvas = $method($this->sourcePath);

$smallCanvas = imagecreatetruecolor($this->thumbWidth, $this->thumbHeight);

//创建白色画笔,并给小图画布填充背景

$white = imagecolorallocate($smallCanvas, 255, 255, 255);

imagefill($smallCanvas, 0, 0, $white);

//计算大图的缩放比例

$rate = $this->calculateRate();

//计算大图缩放后的大小信息

$info = $this->getImageSizeByRate($rate);

//进行缩放

imagecopyresampled($smallCanvas, $bigCanvas,

($this->thumbWidth - $info['w']) / 2 , ($this->thumbHeight - $info['h']) / 2,

0, 0, $info['w'], $info['h'], $this->sourceWidth, $this->sourceHeight);

//保存成文件

$this->saveFile($smallCanvas);

//销毁画布

imagedestroy($bigCanvas);

imagedestroy($smallCanvas);

}

}

?>

上传类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89
<meta charset="utf8"/>

<?php

/**

* 文件上传类

* @author webbc

*/

class Upload{

private $allowExt = array('gif','jpg','jpeg','bmp','png','swf');//限制文件上传的后缀名

private $maxSize = 1;//限制最大文件上传1M

/**

* 获取文件的信息

* @param str $flag 上传文件的标识

* @return arr 上传文件的信息数组

*/

public function getInfo($flag){

return $_FILES[$flag];

}

/**

* 获取文件的扩展名

* @param str $filename 文件名

* @return str 文件扩展名

*/

public function getExt($filename){

return pathinfo($filename,PATHINFO_EXTENSION);

}

/**

* 检测文件扩展名是否合法

* @param str $filename 文件名

* @return bool 文件扩展名是否合法

*/

private function checkExt($filename){

$ext = $this->getExt($filename);

return in_array($ext,$this->allowExt);

}

/**

* 检测文件大小是否超过限制

* @param int size 文件大小

* @return bool 文件大小是否超过限制

*/

public function checkSize($size){

return $size < $this->maxSize * 1024 * 1024;

}

/**

* 随机的文件名

* @param int $len 随机文件名的长度

* @return str 随机字符串

*/

public function randName($len=6){

return substr(str_shuffle('abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ234565789'),0,$len);

}

/**

* 创建文件上传到的路径

* @return str 文件上传的路径

*/

public function createDir(){

$dir = './upload/'.date('Y/m/d',time());

if(is_dir($dir) || mkdir($dir,0777,true)){

return $dir;

}

}

/**

* 文件上传

* @param str $flag 文件上传标识

* @return arr 文件上传信息

*/

public function uploadFile($flag){

if($_FILES[$flag]['name'] === '' || $_FILES[$flag]['error'] !== 0){

echo "没有上传文件";

return;

}

$info = $this->getInfo($flag);

if(!$this->checkExt($info['name'])){

echo "不支持的文件类型";

return;

}

if(!$this->checkSize($info['size'])){

echo "文件大小超过限制";

return;

}

$filename = $this->randName().'.'.$this->getExt($info['name']);

$dir = $this->createDir();

if(!move_uploaded_file($info['tmp_name'], $dir.'/'.$filename)){

echo "文件上传失败";

}else{

return array('filename'=>$filename,'dir'=>$dir);

}

}

}

?>

希望本文所述对大家PHP程序设计有所帮助。

原文链接:https://blog.csdn.net/baochao95/article/details/52055353

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 PHP常用的类封装小结【4个工具类】 https://www.kuaiidc.com/92393.html

相关文章

发表评论
暂无评论