首頁 後端開發 php教程 php多功能图片处理类分享(php图片缩放类)_PHP

php多功能图片处理类分享(php图片缩放类)_PHP

Jun 01, 2016 am 11:55 AM

复制代码 代码如下:
/**  
*  基本图片处理,用于完成图片缩入,水印添加  
*  当水印图超过目标图片尺寸时,水印图能自动适应目标图片而缩小  
*  水印图可以设置跟背景的合并度 
*/   

/*  
使用方法:  
    自动裁切:  
    程序会按照图片的尺寸从中部裁切最大的正方形,并按目标尺寸进行缩略  

    $t--->setSrcImg("img/test.jpg");  
    $t->setCutType(1);//这一句就OK了  
    $t->setDstImg("tmp/new_test.jpg");  
    $t->createImg(60,60);  

    手工裁切:  
    程序会按照指定的位置从源图上取图  

    $t->setSrcImg("img/test.jpg");  
    $t->setCutType(2);//指明为手工裁切  
    $t->setSrcCutPosition(100, 100);// 源图起点坐标  
    $t->setRectangleCut(300, 200);// 裁切尺寸  
    $t->setDstImg("tmp/new_test.jpg");  
    $t->createImg(300,200);  
*/   
class ThumbHandler   
{   
    var $dst_img;// 目标文件   
    var $h_src; // 图片资源句柄   
    var $h_dst;// 新图句柄   
    var $h_mask;// 水印句柄   
    var $img_create_quality = 100;// 图片生成质量   
    var $img_display_quality = 80;// 图片显示质量,默认为75   
    var $img_scale = 0;// 图片缩放比例   
    var $src_w = 0;// 原图宽度   
    var $src_h = 0;// 原图高度   
    var $dst_w = 0;// 新图总宽度   
    var $dst_h = 0;// 新图总高度   
    var $fill_w;// 填充图形宽   
    var $fill_h;// 填充图形高   
    var $copy_w;// 拷贝图形宽   
    var $copy_h;// 拷贝图形高   
    var $src_x = 0;// 原图绘制起始横坐标   
    var $src_y = 0;// 原图绘制起始纵坐标   
    var $start_x;// 新图绘制起始横坐标   
    var $start_y;// 新图绘制起始纵坐标   
    var $mask_word;// 水印文字   
    var $mask_img;// 水印图片   
    var $mask_pos_x = 0;// 水印横坐标   
    var $mask_pos_y = 0;// 水印纵坐标   
    var $mask_offset_x = 5;// 水印横向偏移   
    var $mask_offset_y = 5;// 水印纵向偏移   
    var $font_w;// 水印字体宽   
    var $font_h;// 水印字体高   
    var $mask_w;// 水印宽   
    var $mask_h;// 水印高   
    var $mask_font_color = "#ffffff";// 水印文字颜色   
    var $mask_font = 2;// 水印字体   
    var $font_size;// 尺寸   
    var $mask_position = 0;// 水印位置   
    var $mask_img_pct = 50;// 图片合并程度,值越大,合并程序越低   
    var $mask_txt_pct = 50;// 文字合并程度,值越小,合并程序越低   
    var $img_border_size = 0;// 图片边框尺寸   
    var $img_border_color;// 图片边框颜色   
    var $_flip_x=0;// 水平翻转次数   
    var $_flip_y=0;// 垂直翻转次数   

    var $cut_type=0;// 剪切类型   

    
    var $img_type;// 文件类型   

    // 文件类型定义,并指出了输出图片的函数   
    var $all_type = array(   
        "jpg"  => array("output"=>"imagejpeg"),   
        "gif"  => array("output"=>"imagegif"),   
        "png"  => array("output"=>"imagepng"),   
        "wbmp" => array("output"=>"image2wbmp"),   
        "jpeg" => array("output"=>"imagejpeg"));   

    /**  
     * 构造函数  
     */   
    function ThumbHandler()   
    {   
        $this->mask_font_color = "#ffffff";   
        $this->font = 2;   
        $this->font_size = 12;   
    }   

    /**  
     * 取得图片的宽  
     */   
    function getImgWidth($src)   
    {   
        return imagesx($src);   
    }   

    /**  
     * 取得图片的高  
     */   
    function getImgHeight($src)   
    {   
        return imagesy($src);   
    }   

    /**  
     * 设置图片生成路径  
     *  
     * @param    string    $src_img   图片生成路径  
     */   
    function setSrcImg($src_img, $img_type=null)   
    {   
        if(!file_exists($src_img))   
        {   
            die("图片不存在");   
        }   

        if(!empty($img_type))   
        {   
            $this->img_type = $img_type;   
        }   
        else   
        {   
            $this->img_type = $this->_getImgType($src_img);   
        }   

        $this->_checkValid($this->img_type);   

        // file_get_contents函数要求php版本>4.3.0   
        $src = '';   
        if(function_exists("file_get_contents"))   
        {   
            $src = file_get_contents($src_img);   
        }   
        else   
        {   
            $handle = fopen ($src_img, "r");   
            while (!feof ($handle))   
            {   
                $src .= fgets($fd, 4096);   
            }   
            fclose ($handle);   
        }   
        if(empty($src))   
        {   
            die("图片源为空");   
        }   
        $this->h_src = @ImageCreateFromString($src);   
        $this->src_w = $this->getImgWidth($this->h_src);   
        $this->src_h = $this->getImgHeight($this->h_src);   
    }   

    /**  
     * 设置图片生成路径  
     *  
     * @param    string    $dst_img   图片生成路径  
     */   
    function setDstImg($dst_img)   
    {   
        $arr  = explode('/',$dst_img);   
        $last = array_pop($arr);   
        $path = implode('/',$arr);   
        $this->_mkdirs($path);   
        $this->dst_img = $dst_img;   
    }   

    /**  
     * 设置图片的显示质量  
     *  
     * @param    string      $n    质量  
     */   
    function setImgDisplayQuality($n)   
    {   
        $this->img_display_quality = (int)$n;   
    }   

    /**  
     * 设置图片的生成质量  
     *  
     * @param    string      $n    质量  
     */   
    function setImgCreateQuality($n)   
    {   
        $this->img_create_quality = (int)$n;   
    }   

    /**  
     * 设置文字水印  
     *  
     * @param    string     $word    水印文字  
     * @param    integer    $font    水印字体  
     * @param    string     $color   水印字体颜色  
     */   
    function setMaskWord($word)   
    {   
        $this->mask_word .= $word;   
    }   

    /**  
     * 设置字体颜色  
     *  
     * @param    string     $color    字体颜色  
     */   
    function setMaskFontColor($color="#ffffff")   
    {   
        $this->mask_font_color = $color;   
    }   

    /**  
     * 设置水印字体  
     *  
     * @param    string|integer    $font    字体  
     */   
    function setMaskFont($font=2)   
    {   
        if(!is_numeric($font) && !file_exists($font))   
        {   
            die("字体文件不存在");   
        }   
        $this->font = $font;   
    }   

    /**  
     * 设置文字字体大小,仅对truetype字体有效  
     */   
    function setMaskFontSize($size = "12")   
    {   
        $this->font_size = $size;   
    }   

    /**  
     * 设置图片水印  
     *  
     * @param    string    $img     水印图片源  
     */   
    function setMaskImg($img)   
    {   
        $this->mask_img = $img;   
    }   

    /**  
     * 设置水印横向偏移  
     *  
     * @param    integer     $x    横向偏移量  
     */   
    function setMaskOffsetX($x)   
    {   
        $this->mask_offset_x = (int)$x;   
    }   

    /**  
     * 设置水印纵向偏移  
     *  
     * @param    integer     $y    纵向偏移量  
     */   
    function setMaskOffsetY($y)   
    {   
        $this->mask_offset_y = (int)$y;   
    }   

    /**  
     * 指定水印位置  
     *  
     * @param    integer     $position    位置,1:左上,2:左下,3:右上,0/4:右下  
     */   
    function setMaskPosition($position=0)   
    {   
        $this->mask_position = (int)$position;   
    }   

    /**  
     * 设置图片合并程度  
     *  
     * @param    integer     $n    合并程度  
     */   
    function setMaskImgPct($n)   
    {   
        $this->mask_img_pct = (int)$n;   
    }   

    /**  
     * 设置文字合并程度  
     *  
     * @param    integer     $n    合并程度  
     */   
    function setMaskTxtPct($n)   
    {   
        $this->mask_txt_pct = (int)$n;   
    }   

    /**  
     * 设置缩略图边框  
     *  
     * @param    (类型)     (参数名)    (描述)  
     */   
    function setDstImgBorder($size=1, $color="#000000")   
    {   
        $this->img_border_size  = (int)$size;   
        $this->img_border_color = $color;   
    }   

    /**  
     * 水平翻转  
     */   
    function flipH()   
    {   
        $this->_flip_x++;   
    }   

    /**  
     * 垂直翻转  
     */   
    function flipV()   
    {   
        $this->_flip_y++;   
    }   

    /**  
     * 设置剪切类型  
     *  
     * @param    (类型)     (参数名)    (描述)  
     */   
    function setCutType($type)   
    {   
        $this->cut_type = (int)$type;   
    }   

    /**  
     * 设置图片剪切  
     *  
     * @param    integer     $width    矩形剪切  
     */   
    function setRectangleCut($width, $height)   
    {   
        $this->fill_w = (int)$width;   
        $this->fill_h = (int)$height;   
    }   

    /**  
     * 设置源图剪切起始坐标点  
     *  
     * @param    (类型)     (参数名)    (描述)  
     */   
    function setSrcCutPosition($x, $y)   
    {   
        $this->src_x  = (int)$x;   
        $this->src_y  = (int)$y;   
    }   

    /**  
     * 创建图片,主函数  
     * @param    integer    $a     当缺少第二个参数时,此参数将用作百分比,  
     *                             否则作为宽度值  
     * @param    integer    $b     图片缩放后的高度  
     */   
    function createImg($a, $b=null)   
    {   
        $num = func_num_args();   
        if(1 == $num)   
        {   
            $r = (int)$a;   
            if($r             {   
                die("图片缩放比例不得小于1");   
            }   
            $this->img_scale = $r;   
            $this->_setNewImgSize($r);   
        }   

        if(2 == $num)   
        {   
            $w = (int)$a;   
            $h = (int)$b;   
            if(0 == $w)   
            {   
                die("目标宽度不能为0");   
            }   
            if(0 == $h)   
            {   
                die("目标高度不能为0");   
            }   
            $this->_setNewImgSize($w, $h);   
        }   

        if($this->_flip_x%2!=0)   
        {   
            $this->_flipH($this->h_src);   
        }   

        if($this->_flip_y%2!=0)   
        {   
            $this->_flipV($this->h_src);   
        }   
        $this->_createMask();   
        $this->_output();   

        // 释放   
        if(imagedestroy($this->h_src) && imagedestroy($this->h_dst))   
        {   
            Return true;   
        }   
        else   
        {   
            Return false;   
        }   
    }   

    /**  
     * 生成水印,调用了生成水印文字和水印图片两个方法  
     */   
    function _createMask()   
    {   
        if($this->mask_word)   
        {   
            // 获取字体信息   
            $this->_setFontInfo();   

            if($this->_isFull())   
            {   
                die("水印文字过大");   
            }   
            else   
            {   
                $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h);   
                $white = ImageColorAllocate($this->h_dst,255,255,255);   
                imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色   
                $this->_drawBorder();   
                imagecopyresampled( $this->h_dst, $this->h_src,   
                                    $this->start_x, $this->start_y,   
                                    $this->src_x, $this->src_y,   
                                    $this->fill_w, $this->fill_h,   
                                    $this->copy_w, $this->copy_h);   
                $this->_createMaskWord($this->h_dst);   
            }   
        }   

        if($this->mask_img)   
        {   
            $this->_loadMaskImg();//加载时,取得宽高   

            if($this->_isFull())   
            {   
                // 将水印生成在原图上再拷   
                $this->_createMaskImg($this->h_src);   
                $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h);   
                $white = ImageColorAllocate($this->h_dst,255,255,255);   
                imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色   
                $this->_drawBorder();   
                imagecopyresampled( $this->h_dst, $this->h_src,   
                                    $this->start_x, $this->start_y,   
                                    $this->src_x, $this->src_y,   
                                    $this->fill_w, $this->start_y,   
                                    $this->copy_w, $this->copy_h);   
            }   
            else   
            {   
                // 创建新图并拷贝   
                $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h);   
                $white = ImageColorAllocate($this->h_dst,255,255,255);   
                imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色   
                $this->_drawBorder();   
                imagecopyresampled( $this->h_dst, $this->h_src,   
                                    $this->start_x, $this->start_y,   
                                    $this->src_x, $this->src_y,   
                                    $this->fill_w, $this->fill_h,   
                                    $this->copy_w, $this->copy_h);   
                $this->_createMaskImg($this->h_dst);   
            }   
        }   

        if(empty($this->mask_word) && empty($this->mask_img))   
        {   
            $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h);   
            $white = ImageColorAllocate($this->h_dst,255,255,255);   
            imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色   
            $this->_drawBorder();   

            imagecopyresampled( $this->h_dst, $this->h_src,   
                        $this->start_x, $this->start_y,   
                        $this->src_x, $this->src_y,   
                        $this->fill_w, $this->fill_h,   
                        $this->copy_w, $this->copy_h);   
        }   
    }   

    /**  
     * 画边框  
     */   
    function _drawBorder()   
    {   
        if(!empty($this->img_border_size))   
        {   
            $c = $this->_parseColor($this->img_border_color);   
            $color = ImageColorAllocate($this->h_src,$c[0], $c[1], $c[2]);   
            imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$color);// 填充背景色   
        }   
    }   

    /**  
     * 生成水印文字  
     */   
    function _createMaskWord($src)   
    {   
        $this->_countMaskPos();   
        $this->_checkMaskValid();   

        $c = $this->_parseColor($this->mask_font_color);   
        $color = imagecolorallocatealpha($src, $c[0], $c[1], $c[2], $this->mask_txt_pct);   

        if(is_numeric($this->font))   
        {   
            imagestring($src,   
                        $this->font,   
                        $this->mask_pos_x, $this->mask_pos_y,   
                        $this->mask_word,   
                        $color);   
        }   
        else   
        {   
            imagettftext($src,   
                        $this->font_size, 0,   
                        $this->mask_pos_x, $this->mask_pos_y,   
                        $color,   
                        $this->font,   
                        $this->mask_word);   
        }   
    }   

    /**  
     * 生成水印图  
     */   
    function _createMaskImg($src)   
    {   
        $this->_countMaskPos();   
        $this->_checkMaskValid();   
        imagecopymerge($src,   
                        $this->h_mask,   
                        $this->mask_pos_x ,$this->mask_pos_y,   
                        0, 0,   
                        $this->mask_w, $this->mask_h,   
                        $this->mask_img_pct);   

        imagedestroy($this->h_mask);   
    }   

    /**  
     * 加载水印图  
     */   
    function _loadMaskImg()   
    {   
        $mask_type = $this->_getImgType($this->mask_img);   
        $this->_checkValid($mask_type);   

        // file_get_contents函数要求php版本>4.3.0   
        $src = '';   
        if(function_exists("file_get_contents"))   
        {   
            $src = file_get_contents($this->mask_img);   
        }   
        else   
        {   
            $handle = fopen ($this->mask_img, "r");   
            while (!feof ($handle))   
            {   
                $src .= fgets($fd, 4096);   
            }   
            fclose ($handle);   
        }   
        if(empty($this->mask_img))   
        {   
            die("水印图片为空");   
        }   
        $this->h_mask = ImageCreateFromString($src);   
        $this->mask_w = $this->getImgWidth($this->h_mask);   
        $this->mask_h = $this->getImgHeight($this->h_mask);   
    }   

    /**  
     * 图片输出  
     */   
    function _output()   
    {   
        $img_type  = $this->img_type;   
        $func_name = $this->all_type[$img_type]['output'];   
        if(function_exists($func_name))   
        {   
            // 判断浏览器,若是IE就不发送头   
            if(isset($_SERVER['HTTP_USER_AGENT']))   
            {   
                $ua = strtoupper($_SERVER['HTTP_USER_AGENT']);   
                if(!preg_match('/^.*MSIE.*\)$/i',$ua))   
                {   
                    header("Content-type:$img_type");   
                }   
            }   
            $func_name($this->h_dst, $this->dst_img, $this->img_display_quality);   
        }   
        else   
        {   
            Return false;   
        }   
    }   

    /**  
     * 分析颜色  
     *  
     * @param    string     $color    十六进制颜色  
     */   
    function _parseColor($color)   
    {   
        $arr = array();   
        for($ii=1; $ii_isFull())   
        {   
            switch($this->mask_position)   
            {   
                case 1:   
                    // 左上   
                    $this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;   
                    $this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;   
                    break;   

                case 2:   
                    // 左下   
                    $this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;   
                    $this->mask_pos_y = $this->src_h - $this->mask_h - $this->mask_offset_y;   
                    break;   

                case 3:   
                    // 右上   
                    $this->mask_pos_x = $this->src_w - $this->mask_w - $this->mask_offset_x;   
                    $this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;   
                    break;   

                case 4:   
                    // 右下   
                    $this->mask_pos_x = $this->src_w - $this->mask_w - $this->mask_offset_x;   
                    $this->mask_pos_y = $this->src_h - $this->mask_h - $this->mask_offset_y;   
                    break;   

                default:   
                    // 默认将水印放到右下,偏移指定像素   
                    $this->mask_pos_x = $this->src_w - $this->mask_w - $this->mask_offset_x;   
                    $this->mask_pos_y = $this->src_h - $this->mask_h - $this->mask_offset_y;   
                    break;   
            }   
        }   
        else   
        {   
            switch($this->mask_position)   
            {   
                case 1:   
                    // 左上   
                    $this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;   
                    $this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;   
                    break;   

                case 2:   
                    // 左下   
                    $this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;   
                    $this->mask_pos_y = $this->dst_h - $this->mask_h - $this->mask_offset_y - $this->img_border_size;   
                    break;   

                case 3:   
                    // 右上   
                    $this->mask_pos_x = $this->dst_w - $this->mask_w - $this->mask_offset_x - $this->img_border_size;   
                    $this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;   
                    break;   

                case 4:   
                    // 右下   
                    $this->mask_pos_x = $this->dst_w - $this->mask_w - $this->mask_offset_x - $this->img_border_size;   
                    $this->mask_pos_y = $this->dst_h - $this->mask_h - $this->mask_offset_y - $this->img_border_size;   
                    break;   

                default:   
                    // 默认将水印放到右下,偏移指定像素   
                    $this->mask_pos_x = $this->dst_w - $this->mask_w - $this->mask_offset_x - $this->img_border_size;   
                    $this->mask_pos_y = $this->dst_h - $this->mask_h - $this->mask_offset_y - $this->img_border_size;   
                    break;   
            }   
        }   
    }   

    /**  
     * 设置字体信息  
     */   
    function _setFontInfo()   
    {   
        if(is_numeric($this->font))   
        {   
            $this->font_w  = imagefontwidth($this->font);   
            $this->font_h  = imagefontheight($this->font);   

            // 计算水印字体所占宽高   
            $word_length   = strlen($this->mask_word);   
            $this->mask_w  = $this->font_w*$word_length;   
            $this->mask_h  = $this->font_h;   
        }   
        else   
        {   
            $arr = imagettfbbox ($this->font_size,0, $this->font,$this->mask_word);   
            $this->mask_w  = abs($arr[0] - $arr[2]);   
            $this->mask_h  = abs($arr[7] - $arr[1]);   
        }   
    }   

    /**  
     * 设置新图尺寸  
     *  
     * @param    integer     $img_w   目标宽度  
     * @param    integer     $img_h   目标高度  
     */   
    function _setNewImgSize($img_w, $img_h=null)   
    {   
        $num = func_num_args();   
        if(1 == $num)   
        {   
            $this->img_scale = $img_w;// 宽度作为比例   
            $this->fill_w = round($this->src_w * $this->img_scale / 100) - $this->img_border_size*2;   
            $this->fill_h = round($this->src_h * $this->img_scale / 100) - $this->img_border_size*2;   

            // 源文件起始坐标   
            $this->src_x  = 0;   
            $this->src_y  = 0;   
            $this->copy_w = $this->src_w;   
            $this->copy_h = $this->src_h;   

            // 目标尺寸   
            $this->dst_w   = $this->fill_w + $this->img_border_size*2;   
            $this->dst_h   = $this->fill_h + $this->img_border_size*2;   
        }   

        if(2 == $num)   
        {   
            $fill_w   = (int)$img_w - $this->img_border_size*2;   
            $fill_h   = (int)$img_h - $this->img_border_size*2;   
            if($fill_w             {   
                die("图片边框过大,已超过了图片的宽度");   
            }   
            $rate_w = $this->src_w/$fill_w;   
    &nb

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話如何劫持工作,如何在PHP中減輕它? 會話如何劫持工作,如何在PHP中減輕它? Apr 06, 2025 am 12:02 AM

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

描述紮實的原則及其如何應用於PHP的開發。 描述紮實的原則及其如何應用於PHP的開發。 Apr 03, 2025 am 12:04 AM

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

在PHPStorm中如何進行CLI模式的調試? 在PHPStorm中如何進行CLI模式的調試? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章討論了框架中的基本安全功能,以防止漏洞,包括輸入驗證,身份驗證和常規更新。

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

See all articles