دسته بندی : زبان برنامه نویسی PHP چهارچوب MVC

ساخت کلاس فایل در پی اچ پی

صورت مسئله : کلاسی بنویسید که فایل مورد نظر بدون در نظر گرفتن بزرگ و کوچکی اسم فایل در فولدرهای موجود پیدا کند و بتواند آن ها را حذف یا سایز فایلها رو به ما برگرداند ؟

به نظر حل روش بالا خیلی راحت میاد ولی امروز میخواییم روش کار با توابع بازگشتی برای حل کردن چنین مسئله های استفاده کنیم که در فولدر های موجود ما بخزه و فایل رو پیدا کنه خوب برای شروع ما یک کلاس به اسم فایل درست میکنیم و بعد دو تا متد find و findCore درون آن قرار میدهیم

class File
{
    public $path , $files ;

    public function __construct( $path = null )
    {
        $this->path = $path ?? getcwd() ;
        $this->files = [] ;
    }

    /*
    * $name string
    */
    private function findCore( $name  , $path , $finds = [] )
    {
        $files = glob( $path . DIRECTORY_SEPARATOR ."*") ;

        foreach ($files as $file){
            if ($file == "." || $file == ".." ) continue ;

            if ( is_dir( $file ) && is_readable( $file ) ){
                $finds = $this->findCore( $name , $file , $finds ) ;
            }
            if ( is_file( $file ) && @preg_match("/$name/i" , $file) ){
                $finds[] = $file ;
            }
        }

        return $finds ;
    }
    public function find( string $name )
    {
        $this->files = $this->findCore( $name , $this->path ) ;
        return $this ;
    }

    /*
    * $this->files required
    * @mixed size all files byte format
    */
    public function size()
    {
        $sizeOf = 0 ;
        if ( !empty($this->files) ){
            foreach ($this->files as $file){
                $sizeOf += filesize($file) ;
            }
        }
        return $sizeOf ;
    }

    /*
    * @mixed get find files
    */
    public function get()
    {
        return $this->files ;
    }

    /*
     * @mixed delete when file selected
     */
    public function delete()
    {
        $files = $this->files ;
        if (!empty($files)){
            $count = 0 ;
            foreach ($files as $file){
                if ( unlink($file) ) $count++ ;
            }
            return $count ;
        }
        return 0 ;
    }

}

 کار متد های  بالا دقیقا چیه ؟

  • متد جادویی construct : این متد زمانی که میخواد شی ما ساخته بشه یک مقدار path میگیره یعنی از چه فولدری میخوایین جستجو شروع بشه به صورت پیشفرض ما با تابع getcwd این پروپرتی رو مقدار دهی میکنیم که مسیر اولیه هاست ما یعنی home/username رو برمیگردونه و از این فولدر جستجو رو شروع میکنه .
  • findCore : هسته اصلی جستجو در پوشه ها را بر عهده دارد یک تابع برگشتی زمانی که یک پوشه را پیدا کرد به خود تابع اشاره میکند و دوباره خودشو فراخونی میکنه زمانی که نتیجه جستجو فایل بود و اسم فایل با ورودی ما برابری داشت اون رو داخل ارایه finds قرار میده و در صورت پایان این ارایه رو به ما بر میگردونه 
  • find :  در این متد ما به تابع findCore ورودی های مورد نظر رو ارسال میکنیم و در نهایت نتیجه رو در property files ذخیره میکنیم این تابع فقط this رو بر میگردونه پس ما داریم از حالت chaning php برای سوییچ شدن به یه متد دیگه استفاده میکنیم. 
  • size : همون طور که از نامش مشخصه برای ما مقدار سایز فایل های انتخابی رو بر میگردونه و بر حسب byte هستش 
  • delete : وقتی ما فایل های جستجو شده رو پیدا کردیم میتونیم با استفاده از این تابع فایل ها رو unlink کنیم و فایل انتخابی حذف میشه 

نمونه کد ها برای استفاده :

//* تمام فایل های که نامشون برابر با nameFile بود رو برمیگردونه *//
( new File() )->find("nameFile")->get()

//* فایل های که نامشون برابر با nameFile بود رو پیدا کرده و مقدارشون رو بر میگردونه *//
( new File() )->find("nameFile")->size()

//* تمام فایل های که نامشون برابر با nameFile رو پیدا و حذف میکنه *//
( new File() )->find("nameFile")->delete()

شما میتونید سورس پروژه رو در اینجادانلود کنید .

0| از0رای

مطالب مشابه


0 دیدگاهافزودن