では、修飾されたクラスの設計を開始するにはどうすればよいでしょうか? 最初に class{} を記述するのは間違いであり、代わりに、このクラス、このオブジェクト、およびあらゆる種類の属性メソッドがすでに存在すると仮定します。たとえば、サムネイル クラスを作成する場合、次回使いやすいようにそれをクラスにカプセル化したいと考えます。まず、そのオブジェクトが何であるかを明確にする必要があります。サムネイル作成の本質的な操作は画像を縮小して出力することです。Web サイト上の画像は画像だけではありません。 、どの画像であるかを伝える必要があるため、このクラスはすでに存在すると仮定できます。たとえば、 $simg = new simg("1.jpg"); のように最初にその画像を宣言する必要があります。写真はありますか? サムネイルを作成するときに最も気にするのは、幅、高さ、タイプです。これらの 3 つの項目は画像に対して確実です。つまり、このオブジェクトには $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 //このオブジェクトは次のように動作できるはずです。
oop の考え方の原則によれば、オブジェクトのプロパティが変更されると、オブジェクトもそれに応じて変更されるはずです。つまり、オブジェクトに値を代入し、オブジェクトの幅と高さを取得し、計算後に (たとえばスケールダウンとして)、値を再割り当てし直します。私たちの本質は、画像のサムネイルを作成すること、つまり、変更した画像を保存することです。 たとえば、$simg->save() の場合は、別の場所に保存することを検討してください。少なくとも 1 つの名前を変更する必要があります。つまり、使用するときは、オブジェクトを次のように記述する必要があります。画像は次の場所に保存されます。これは、このメソッドには保存場所を示すパラメーターがあることを意味します。
コードをコピーします コードは次のとおりです:
$simg = new simg("1.jpg");//インスタンス化
$simg->width = 200;//幅を設定します
$simg->gt ;height = 200;//高さを設定
$simg->save("2.jpg");//2.jpg に保存
このクラスを使用する場合、思考の説明と記述されたコードは完全に一致している必要があります。ここでの思考の説明には小さな問題があり、おっと思考の原則に沿っていない誤った方向につながる可能性があります。ここでのオブジェクト指向とは: オブジェクトの属性が変更されるのはなぜですか? 元の画像のサイズが変更されないのはなぜですか? 何が変わるかというと、画像が個別に保存されるということです。これは、このオブジェクトが実際には 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"); //1枚の画像を元にします
//サイズを変更します
$simg->width = 200;
$simg->height = 200; ; //保存 起きてください
これはより明白で、サムネイルをインスタンス化しますが、サムネイルはまだ存在せず、保存するまでハードドライブ上に存在しません。
ここでは、最初の方法に従って、元の画像の観点からこのクラスを作成します。上記の分析に基づいて、次のようになります。
コードをコピーします コードは次のとおりです:
class simg {
public $width = 0;
public $height = 0;
public function __construct($img) {
}
パブリック関数 size($width, $height) {
}
public 関数 save($path) {
}
}
次に、各メソッドの各属性の要件に従って内部のコードを入力します。PHP はさまざまな種類の画像を処理するためにさまざまな関数を使用するため、ファイルの高さと幅を最初から知っておく必要があります。種類は何ですか。どの関数を使用するかを決めるためにクラスを設計するときは、インスタンス化直後に幅と高さを知る必要があります。これはコンストラクター内で実行する必要があります。ここでは、getimagesize 関数を使用して、ファイルの幅、高さ、型、高さを取得できます。ここの属性。このようにして、画像のインスタンス化と属性の取得の問題は解決されました。サイズを変更するプロセスについてはどうでしょうか。
コードをコピーします コードは次のとおりです:
class simg {
public $width = 0;
public $height = 0;
public function __construct($img) {
$var = getimage サイズ ($ img); m $ this-> width = $ var [0]; $ this-& gt; public function save($path);
}
インターネット上で一般的に使用される画像タイプは gif jpg png の 3 つであるため、他のタイプは当面考慮せず、リサイズ方法も考慮しません。出力前には何も行われません。私たちのコードは出力される画像のサイズを知る必要があるだけであると言えますが、さまざまなメソッドと内部変数は普遍的ではありません。どうすればよいでしょうか? 登録されたグローバル変数は外部変数によって簡単に妨害され、汚染されるため、クラス属性を使用して保存します。新しく追加された 2 つの属性には、暫定的に w と h という名前が付けられています。これらの 2 つの属性は、厳密には、メソッド間で変数を転送するために属性を使用するだけです。定義するときに、次のように追加します。キーワード private を使用してアクセスを制限します。private $w = 0;
コードをコピーします
コードをコピーします
コードは次のとおりです:
public $width = 0;
public $height = 0;
public $path = '';
public $type = 0;
private $w = 0;
private $h = 0;
public function __construct($ img) {
$var = getimagesize($img); を通じて アウト アウト アウト アウト アウト アウトのうち' ‐ ‐ ‐$Var---> $var[0]; になるまでの幅 img;
through ' using ' using ‐ ‐ ‐ ‐
その後、元の画像を読み込み、サイズを変更し、saveメソッドで指定した場所に保存します。saveメソッドに関しては、呼び出すさまざまな種類の関数を記述するときにswitch($)を使用することを選択できます。 var[2 ]) 判断して新規サムネイルを作成し保存します。
コードをコピーします
コードは次のとおりです:
//このクラスの記述方法に従います。 。使い方はこんな感じです
$simg = 新しい simg("1.jpg");
//幅と高さを読み取り、
$simg->width
を計算します
//サイズを設定$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; これ; }
現在のオブジェクトを返すので、(この) サイズを画像として使用し、(ここに) $simg->size(200, 200)->save("2.jpg"); として保存できます。 oop のアイデアを含む行 クラスのカプセル化が完了しました。
http://www.bkjia.com/PHPjc/781411.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/781411.html
技術記事では、修飾されたクラスの設計を開始するにはどうすればよいでしょうか? 最初に class{} を記述するのは間違いであり、代わりに、このクラス、このオブジェクト、およびさまざまな属性がすでに存在すると仮定します。