午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    php面向?qū)ο蠼坛讨远x類
    來源:易賢網(wǎng) 閱讀:764 次 日期:2014-10-08 13:52:13
    溫馨提示:易賢網(wǎng)小編為您整理了“php面向?qū)ο蠼坛讨远x類”,方便廣大網(wǎng)友查閱!

    那怎么開始設(shè)計一個合格的類呢,一開始就寫class{}的都錯了,正確的是什么都不寫,而是假設(shè)這個類已經(jīng)存在,這個對象已經(jīng)存在,各種屬性方法都已經(jīng)有了,在這個完全的假設(shè)下想象下這個對象應(yīng)該怎么用,例如我們制作一個縮略圖的類,我們希望封裝成一個類,方便下次使用,我們首先需要明確對象是什么它會做什么,要制作縮略圖本質(zhì)操作是縮小圖片并輸出,這里被操作的是圖片,那么對象就是圖片,由于網(wǎng)站上的圖片不是唯一的我們得告訴這是那張圖片,這就可以假設(shè)下這個類已經(jīng)存在,一開始就得聲明是那張圖片,例如$simg = new simg(1.jpg);那么,一張圖片應(yīng)該有哪些屬性? 在制作縮略圖的時候,我們最關(guān)心的應(yīng)該是 寬,高,類型,而且這三項對一張圖片而言是肯定的,這意味著這個對象一定有這些屬性,$simg->width,$simg->height,$simg->type,并且這些屬性一開始就可以讀取的到的,

    代碼如下:

    1 $simg = new simg(1.jpg);

    2 echo $simg->width;

    3 echo $simg->height;

    4 echo $simg->type;

    5 //這個對象,應(yīng)該可以這樣操作。

      根據(jù)oop的思想的原則,如果對象的屬性被改變,對象應(yīng)當也會發(fā)生相應(yīng)的改變,這就意味著我們可以給它賦值,取得對象的寬度,高度,計算后(比如按比例縮?。?,重新賦值回去。我們本質(zhì)是要制作一張圖片的縮略圖,也就是生成一張新的圖片,改變它之后,接下來要做的事情就應(yīng)該是把這個改變過的圖片存起來了,存起來是一個過程,所以它會是一個方法。 例如 $simg->save(),考慮到要換一個地方存。至少要改一個名字吧, 也就是說在使用的時候,這個對象應(yīng)該是這樣描述的,圖片 保存到 …… 這意味著,這個方法,有一個參數(shù),就是保存到哪。

    代碼如下:

    $simg = new simg(1.jpg);//實例化

    $simg->width = 200;//設(shè)置寬度

    $simg->height = 200;//設(shè)置高度

    $simg->save(2.jpg);//保存到2.jpg

    在使用這個類的時候思維描述和寫出來的代碼應(yīng)當完全一致,這里的思維描述出現(xiàn)了一個小問題,可能會產(chǎn)生不符合oop思維原則的誤導(dǎo),這里不符合面向?qū)ο蟮氖牵簩ο髮傩灾匦沦x值 原圖的大小為什么沒有發(fā)生變化,變化的是另存出來的,也就是說這個對象其實是php內(nèi)存中源對象的復(fù)制品,我們改變了復(fù)制品的大小并保存了下來,所以圖片被真正改變之前圖片的屬性應(yīng)當是只讀的,改寫是無效的, 所以,如果以原圖做為對象來描述的話。這樣描述應(yīng)該更準確:圖片 改變大小后 另存為 。而原圖的大小是沒有發(fā)生改變的,改變大小是一個過程,這意味著這也是一個方法,

    代碼如下:

    //這個類,用起來應(yīng)該是這樣的。

    //實例化一張圖片

    $simg = new simg(1.jpg);

    //讀取圖片寬高計算比例

    $simg->width

    $simg->height

    //圖片使用指定的寬高另存為……

    $simg->size(200,200)->save(2.jpg);

    這是以原圖做為對象的角度來描述的,盡管是不存在的一個類,但它的用法必須事先存在,并且符合oop的思想原則,即這是個什么東西,它可以做些什么。如果從另外的角度來思考呢,以即將被輸出的圖片作為對象呢,那么這個對象創(chuàng)建出來的時候它應(yīng)該是空的,然后它必須以某張原圖為基準,然后調(diào)整它的大小,再把它保存下來,

    代碼如下:

    //按這個思路描述。代碼應(yīng)該是這個樣子

    $simg = new simg(); //一開始是空的

    echo $simg->width; //肯定是 0

    $simg->load(1.jpg); //以一張圖為基準

    echo $simg->width; //沒改過,是原圖大小

    //改變大小

    $simg->width = 200;

    $simg->height = 200;

    $simg->save(2.jpg); //保存起來

    此時看起來還不太明顯

    下面會更好:

    代碼如下:

    $simg = new simg(2.jpg); //一開始是空的,指定一個文件名

    $simg->load(1.jpg); //以一張圖為基準

    //改變大小

    $simg->width = 200;

    $simg->height = 200;

    $simg->save(); //保存起來

    這樣會更明顯一些,實例化一個縮略圖,但它還不存在,直到保存以后它才存在于硬盤中 。

      在此我們先按照第一種方式以原圖為對象的角度創(chuàng)建這個類,根據(jù)上面的分析如下:

    代碼如下:

    <?php

    class simg {

    public $width = 0;

    public $height = 0;

    public function __construct($img) {

    }

    public function size($width, $height) {

    }

    public function save($path) {

    }

    }

    之后再根據(jù)對每個方法每個屬性的要求,填上里面的代碼,一開始就必須知道文件的高度,寬度,由于php處理不同類型的圖片使用的函數(shù)不同,我們在這里不得不知道文件類型是多少。以決定用哪個函數(shù) 設(shè)計類的時候,才是思考“怎么做”的時候,要在實例化之后,馬上知道寬高。一定是在構(gòu)造函數(shù)里完成的,只有構(gòu)造函數(shù)會在類實例化的時候執(zhí)行,這里我們可以使用 getimagesize 函數(shù),取得文件的寬度,高度,類型 ,寬度和高度,我們可以在這里,賦值給屬性。這樣一來,實例化圖片,就得到屬性的問題就解決了,那改變大小的過程呢?

    代碼如下:

    <?php

    class simg {

    public $width = 0;

    public $height = 0;

    public function __construct($img) {

    $var = getimagesize($img);

    $this->width = $var[0];

    $this->height = $var[1];

    }

    public function size($width, $height) {

    }

    public function save($path) {

    }

    }

    由于網(wǎng)絡(luò)上常用的圖片類型有g(shù)if jpg png 三種,其他的類型暫時不做考慮,調(diào)整大小的方法。在輸出之前是什么也不做的??梢哉f,我們的代碼,只要知道要輸出的圖片是多大就可以了 但是,不同的方法,內(nèi)部變量不通用。怎么辦注冊全局變量容易被外部變量干擾和污染,那我們就利用類的屬性來保存。新加兩個屬性這里暫定為w和h,這兩個屬性,嚴格來說不是屬性,只是我們利用屬性來在方法之間傳遞變量而已,為了避免它們在類的外部被訪問和修改我們在定義的時候使用關(guān)鍵字私有來進行訪問限制,private $w = 0;private $h = 0;

    代碼如下:

    public function size($width, $height) {

    $this->w = $width;

    $this->h = $height;

    }

    改變大小的方法,只要暫時把要輸出的寬度和高度記下來就可以了。 下面就是保存了,要保存之前,得先把圖片弄小了才行,所以,縮略圖的計算過程,主要在這里完成,需要載入原圖才能縮小,而且,也要知道文件類型才行 ,因為不同類型的圖片載入方式是不同的,文件名和文件類型。在構(gòu)造函數(shù)才知道,此時我們再加入兩個公共屬性,

    代碼如下:

    public $width = 0;

    public $height = 0;

    public $path = '';

    public $type = 0;

    private $w = 0;

    private $h = 0;

    public function __construct($img) {

    $var = getimagesize($img);

    $this->width = $var[0];

    $this->height = $var[1];

    $this->path = $img;

    $this->type = $var[2];

    }

    之后,我們可以在保存的方法里,載入原圖,改變大小,并保存到指定的位置上,至于保存方法的書寫不同的類型調(diào)用的函數(shù)時不同的可以選擇使用switch ($var[2])進行判斷 在進行新建一個縮略圖然后保存。

    代碼如下:

    //按這個類的編寫方式。。使用方法應(yīng)該是這樣

    $simg = new simg(1.jpg);

    //讀取寬高并計算

    $simg->width

    //設(shè)置大小

    $simg->size(200, 200);

    //保存到

    $simg->save(2.jpg);

    和描述有點不一樣 ,因為描述是:使用(這個)大小,另存為(這里)這個描述有點繞口,如果可以這樣寫就沒問題了$simg->size(200, 200)->save(2.jpg);對象的使用必須是這樣的對象->方法()這就要求前面的量里的值必須是一個對象,save前面是size這就要求size的返回值必須是一個對象,但是這個方法沒有什么東西需要返回,而且這個對象肯定是當前對象,才會有save方法,沒有對象不要緊我們自己添加一個,

    代碼如下:

    public function size($width, $height) {

    $this->w = $width;

    $this->h = $height;

    return $this;

    }

    返回當前的對象,這樣就可以用圖片 使用(這個)大小,另存為(這里)$simg->size(200, 200)->save(2.jpg);這樣一個符合oop思想的類封裝完成了。

    更多信息請查看IT技術(shù)專欄

    更多信息請查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機網(wǎng)站地址:php面向?qū)ο蠼坛讨远x類

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)