PHP対象教程に向かうカスタムクラス


どのようにして合格クラスを設計し始めましたか?最初からクラスの表記が間違っていました。正確には何も書かないで、このタイプがすでに存在していると仮定して、この対象はすでに存在しています。属性の方法はすでにあります。この完全な仮定のもとで、この対象はどうやって使うべきですか?例えば、サムネイルの種類を作ってみます。次の使用に便利です。まず対象が何かを明確にして、サムネイルの本質的な操作を縮小して出力する必要があります。ここで操作されているのは写真です。対象は写真です。ウェブサイトの写真は唯一のものではないので、これはこの種類がすでに存在していると仮定して、最初からその写真だと宣言しなければなりません。例えば$simg=new simg("1.jpg")では、一枚の写真にはどのような属性がありますか?サムネイルを作成する際に、私たちが最も関心を持つべきは幅、高、タイプであり、この3つは1つの画像に肯定的であることを意味します。これはこのオブジェクトには必ずこれらの属性があります。

1 $simg = new simg("1.jpg");
2 echo $simg->width;
3 echo $simg->height;
4 echo $simg->type;
5 // , 。
oopの思想の原則によって、対象の属性が変えられたら、対象も相応の変化が起こるはずです。これは私達が対象の幅、高さ、計算後(例えば比例で縮小します)を与えて、新たに値を付けることができるということです。私達の本質は1枚のピクチャーの略図を作るので、つまり1枚の新しいピクチャーを形成して、それを変えた後に、続いてする事はこの変化したピクチャーを貯蓄するべきで、貯蓄するのは1つの過程で、だからそれは1つの方法です。例えば$simg->save()は、他のところに預けたいと考えています。名前を変えましょう。つまり、このオブジェクトはこう記述されています。写真は保存されています。この方法は、パラメータがあります。どこに保存されていますか?

$simg = new simg("1.jpg");//
$simg->width = 200;//
$simg->height = 200;//
$simg->save("2.jpg");// 2.jpg
このクラスを使用する時、思考記述と書いたコードは完全に一致していなければならない。ここの思惟記述には小さな問題があり、oop思考の原則に合わない誤解が生じる可能性がある。ここでは対象に合わないのは、対象属性を新たに与えた原図の大きさがなぜ変化していないのか、変化したのは別の保存である。つまり、この対象はphpメモリのソースオブジェクトのレプリカであり、レプリカのサイズを変えて保存していますので、画像が本当に変更される前の画像の属性は読み取り専用で、書き換えは無効です。原図を対象に説明すれば。このような説明はより正確であるべきです。画像のサイズを変更し、名前を付けて保存します。原図の大きさは変更されていません。大きさを変えるのは一つのプロセスです。これも一つの方法です。

// , 。
//
$simg = new simg("1.jpg");
//
$simg->width
$simg->height
// ……
$simg->size(200,200)->save("2.jpg");
 
これは原図を対象としたもので、存在しないものの一つですが、その用法は事前に存在しなければなりません。そして、oopの思想原則に合致しています。つまり、これは何ですか?何をすることができますか?もし別の角度から考えたら、出力される画像を対象とします。このオブジェクトが作成された時は、空いているはずです。そして、ある原図を基準にしてサイズを調整して保存してください。

// 。

$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();  //
このようにすると、より明確になります。サムネイルは実用化されますが、保存されてからハードディスクに存在します。
まず最初の方法で原図を対象とした角度からこのクラスを作成します。上の分析によると、次のようになります。

<?PHP
class simg {
    public $width = 0;
    public $height = 0;
    public function __construct($img) {
    }
    public function size($width, $height) {
    }
    public function save($path) {
    }
}
その後、各方法の属性に対する要求によって、中のコードを記入します。最初からファイルの高さ、幅を知る必要があります。どの関数でクラスをデザインするかを決めるとき、「どうするか」を考えるときは、実際にモデル化してから、すぐに幅の高さを知る必要があります。きっとコンストラクタ内で完成したのです。コンストラクタだけがクラスの実装時に実行されます。ここではgetimagesize関数を使用して、ファイルの幅、高さ、タイプ、幅と高さを得ることができます。ここで属性を付与できます。このようにして、画像を具体化すると、属性の問題が解決されます。大きさを変える過程は?

<?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) {
    }
}
ネット上でよく使われているピクチャタイプは、gif jpg pngの3種類がありますので、他のタイプはしばらく考えずにサイズを調整する方法です。出力する前には何もしません。私たちのコードは出力する画像がどれぐらい大きいかを知るだけでいいです。しかし、異なる方法では内部変数は通用しません。グローバル変数を登録するには、外部変数に干渉されやすく、汚染されやすいので、クラスの属性を利用して保存します。ここで暫定的にwとhの2つの属性を追加しました。厳密には属性ではなく、変数を方法間で伝達するための属性を利用しています。クラスの外部からアクセスしたり、修正したりすることを避けるために、私たちは定義の際にキーワードのプライベートを使ってアクセス制限を行います。prvate  $h=0;

  public function size($width, $height) {
        $this->w = $width;
        $this->h = $height;
    }
サイズを変える方法は、出力する幅と高さを一時的にメモしておけばいいです。以下は保存します。保存する前に、画像を小さくしてからでないといけません。だから、サムネイルの計算過程は主にここで完成します。原図を読み込むと縮小できます。また、ファイルの種類を知る必要があります。コンストラクタで初めて知ったのです。この時、私たちはもう二つの共通属性を追加します。

 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];  
    }
 その後、保存方法において、原図をロードし、サイズを変えて、指定の位置に保存します。保存方法については、異なる種類の呼び出しの関数を書く場合は、異なる種類のSwitch($var[2])を使って判断して、新しい縮図を作成して保存します。

// 。。

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

//
$simg->width

//
$simg->size(200, 200);
//
$simg->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")に保存できます。このような考えに合った種類のパッケージが完成しました。