• ベストアンサー

-> について教えてください

phpを勉強しているところなんですが、->の意味がよくわかりません。 自分の持っている本にも調べ方が悪いのか見つからないし、ググってもうまくヒットせずで… >,=>なら大小や連想配列ってわかるのですが、->はなに?ってところで悩んでいます。 以下、適当なコードのサンプルです。 (2行目、3行目が問題の->が使われています) -> の使い方や意味をご教授いただけたらと思います。 $thumb = new Thumbnail($_GET['filename']); $thumb->resize($_GET['width'],$_GET['height']); $thumb->show(); それともう一点。 大きな画像(例 500px×500px)があるとき、それを小さく表示(100px×100px)させたいときは、リサイズさせて表示させるのと、DBにinsertする際にすでに別にスモールサイズで登録(500,100 2つファイルをつくる)するのと、どちらがいいんでしょうか? 毎回リサイズで表示させるのは負荷がかかるのかなと思い…それなら最初の登録する際に別で小さいサイズのコピーを作ってそれを見せるようにしたほうがいいのかなと思いましたので。 以上、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.2

アロー演算子 と呼ばれています 「アロー」で通じます //たぶん、こんな感じのclassが存在するんだと思います (* php4で動くようなサンプルです) class Thumbnail { function Thumbnail($filename){ //ファイルネームを保持する処理 } function resize($width,$height){ //リサイズする処理 } function show(){ //表示する処理 } } //インスタンスを生成します $thumb = new Thumbnail($_GET['filename']); Thumbnailというクラスの実態を作る作業です 大雑把に言えば、 クラスは「設計図」、インスタンス生成は「お家を作る」という感覚だと思ってください。 $thumb の中に、たくさんの 変数や 関数が含まれているもの、一般的にはオブジェクトと呼ぶ。 ためしに var_dump($thumb); とすれば、中に格納されている変数達が見れます //リサイズしたいサイズを指定 $thumb->resize($_GET['width'],$_GET['height']); $thumbは、さまざまな変数や関数をもっている といいましたが $thumbオブジェクト内のresize関数に対して($_GET['width'],$_GET['height'])を実行してください という意味です //表示 $thumb->show(); $thumb内のshowを実行してください の意味です という流れだと思います。どこから このソースを持ってきたのかわからないので Thumbnail クラスの中身が分からないのでなんともいえませんが想像するに こんな感じです 小さい画像ですが、私の場合は ・登録するとき または ・一番初めに表示するとき に小さいサムネイルファイルを生成しますね その機能が何をするかで臨機応変にします

armstrong-us
質問者

お礼

ご回答ありがとうございます。 アロー演算子というんですね。 参考になりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • Nii
  • ベストアンサー率48% (79/162)
回答No.4

>ググってもうまくヒットせずで… クラスとかオブジェクトを絡めて検索されては? >使い方や意味をご教授いただけたらと思います。 No1で既に書かれていますが、以下のページが参考になるかと http://www.scollabo.com/banban/php/php_11.html http://www.komonet.ne.jp/~php/chap10.htm >画像処理はメモリ食いますし負荷もかかるので最初の1回だけにしますね。 大抵はそれでいいかと思いますが、実際には要件によりけりだと・・・ 例えば、投稿された写真を表示する場合に、転用予防目的で、写真全体に透かしを入れて表示したいとします。 透かしは、固定位置だと、その部分だけを切り取られたら終わりですから、ランダムで挿入する必要があります。 しかし、ランダムでは重要な部分(人の顔等)にかぶる場合もあったので、毎回生成するようになりました。

参考URL:
http://www.scollabo.com/banban/php/php_11.html
armstrong-us
質問者

お礼

ご回答ありがとうございます。 参考URLも大変助かりました。

全文を見る
すると、全ての回答が全文表示されます。
  • wp_
  • ベストアンサー率54% (132/242)
回答No.3

そういえば->はなんて言うんでしょうね。 コールとか呼び出しとは言いますが。(当方はコール) javaとかだとメンバアクセス演算子とか言いますが微妙に違う気がする。 // と思ってたら答えが!アローなのか・・・ まにゅある class http://jp.php.net/manual/ja/language.oop5.basic.php /** * クラス定義 */ class Thumbnail {  public $filename = "";  private $width = 100;  private $height = 100;    public function __construct($arg) {   $this->filename = $arg;  }  public function resize($w,$h) {   $this->width = $w;   $this->height = $h;  }  public function show() {   echo '<img src="'.$this->filename . '"'    . ' width="' . $this->width.'"'    . ' height="' . $this->height . '"'    . ' />';    ;  } } /** * 処理 */ // インスタンス生成 $thumb = new Thumbnail('/tmp/moge/gazou.jpg'); // 関数をcall $thumb->resize(500,500); $thumb->show(); // debug print_r($thumb); echo $thumb->filename; // /tmp/moge/gazou.jpg echo $thumb->width; // ERROR クラス定義は適当ですが。 ->はクラスで定義された関数(メソッド)や変数(メンバ)を実行、取得するためのものです。 例ですとfilenameがメンバ、resize()やshow()がメソッドです。 $thisや$thumbはインスタンスと呼ばれ、メンバとメソッドを内包する「オブジェクト」になります。($thisは自分自身を指す) 上記コードだとクラスの威力が実感できませんが、継承・抽象クラスなどが使えるようになれば恩恵を理解できるかと思います。 マニュアルを中心に参照し、試行錯誤すると良いでしょう。 実用コードですとsmarty、それに付随するフレームワーク(Mapleとか)のソースを眺めると理解が深まるかと。 >大きな画像(例 500px×500px)があるとき、それを小さく表示(100px×100px)させたいときは 大きな画像のままクライアントに送信すると、クライアント側のブラウザが仕事をすることになります。 その上、ネットワークへの負荷が無駄に掛かることとなります。 地球環境にやさしくするために(サーバの領域を多少使ってでも)小さな画像を最初に用意すべきですね。 画像掲示板など動的に画像を生成せねばならない場合も同様です。

armstrong-us
質問者

お礼

ご回答ありがとうございます。 丁寧にいろいろと書いてくださって恐れ入ります。 とてもためになりました。

全文を見る
すると、全ての回答が全文表示されます。
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

私は矢印演算子と呼んでいますが本当の名前は知りません classで定義された変数や関数を指定するときに使います ご質問のケースでは$thumbにはThumbnailクラスで定義された色々な変数や関数が含まれています。 $thumb->resize($_GET['width'],$_GET['height']); は$thumbオブジェクトに含まれるresize()関数を実行します。 画像処理はメモリ食いますし負荷もかかるので私なら最初の1回だけにしますね。

armstrong-us
質問者

お礼

ご回答ありがとうございます。 勉強になりました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHPの関数の使い方が分かりません。

    お世話になります。 目的は、関数で縮小した画像を4枚、座標を指定して表示させることです。 以下のような、PHPのプログラムを組んで、実行したのですが、 画像が1枚だけ縮小された状態で表示され、うまく行きません。 <?php //4つの同じサイズの縮小画像を表示させたい。 for ($i = 0; $i < 4; $i++) { // ファイルと新規サイズ $filename = 'pr-01.jpg'; //同フォルダ内の画像ファイル名 $percent = 0.2; //縦横比0.2倍のサイズへ。 // コンテントタイプ header('Content-Type: image/jpeg'); // 新規サイズを取得します list($width, $height) = getimagesize($filename); $newwidth = $width * $percent; $newheight = $height * $percent; // 読み込み $thumb = imagecreatetruecolor($newwidth, $newheight); $source = imagecreatefromjpeg($filename); // リサイズ imagecopyresized($thumb, $source, $i*100, $i*100, 0, 0, $newwidth, $newheight, $width, $height); // 出力 imagejpeg($thumb); } ?> これについて、教えて下さい。 お願い致します。

    • ベストアンサー
    • PHP
  • jQueryで画像の幅と高さをリサイズする方法

    jQueryでサイズが異なる画像の幅と高さをリサイズするのに、非常に困っています。 XMLもしくはJSONで複数画像をサーバーサイドから取得します。その画像の条件は、幅サイズは異なるのですが、高さは一定です。仮に高さを140pxとします。 要件を簡単に述べると、 Webサイトの画⾯幅が900pxとした場合に、画像をその幅にきっちり収まるようにしたい。(1pxや2px程度の空きがでても良い) きっちり収めるためには、画像のリサイズを行わなければならないのですが、各行毎の画像の高さは一定とする。(一行目と二行目の高さは異なってよい。) という感じになっています。 そのリサイズ方法ですが、 画⾯の横幅に取得した画像の先頭から何枚収まるか算出しなければなりません。 仮に以下のような画像の横幅とします。 1枚目:180 2枚目:240 3枚目:120 4枚目:80 5枚目:1000 6枚目:600 7枚目:300 8枚目:500 9枚目: 10枚目: ・ ・ ・ これらの画像横幅を足すと 180 + 240 + 120 + 80 + 1000 = 1620 となるため、画面幅の900を超えてしまいます。 そのため4枚目までしか画面幅に収まりません。なので4枚目までの画像幅を足します。 180 + 240 + 120 + 80 = 620 900(画面幅) ÷ 620(幅総数) x 140(画像の規定高さ) = 203(切り捨て) となり、その行に納まる4枚の画像の高さを203pxにして、それに併せて4枚の画像の幅サイズをリサイズします。 1枚目の画像の場合: 180 × (203 ÷ 140) = 261 2枚目の画像の場合: 240 × (203 ÷ 140) = 348 としていくと、4枚の画像の幅総数が899となり画面幅に収まります。高さは4枚すべて203pxです。 5枚目が1000と900を大幅に超えていますので、この場合以下のように高さをだします。 900 ÷ 1000 × 140 = 126 1000 × (126 ÷ 140) = 900 として幅900px、高さ126pxとリサイズします。 という具合に6枚目、7枚目、8枚目の画像の幅総数が900以内として、 すべての画像のそれぞれ高さと幅をリサイズしていきます。 こういった場合に、画像それぞれの幅を見て、画面幅の収める枚数の画像を決めて、 上記のような条件でリサイズしていけばよいでしょうか。 何卒、力添えをお願い致します。

  • 画像アップロード時の複数パターンのリサイズ

    皆さんのお知恵をお貸し下さい。 現在PHPでアップロードした画像を処理していますが、 これを複数パターンのサイズ変更が出来なくて悩んでいます。 1つのファイルで 【width 280px height 430px】 【width 240px height 320px】 【width 170px height 200】 【width 60px height 60px 】 お手数ですがご教授して頂けると幸いです。 ※汚いコードで申し訳ございません。 PHP:5.2.17  サーバー:さくらインターネット up.php ------------ <?php if($_POST['id'] === ""){ echo 'ID Error'; exit(); } if($_POST['name'] === ""){ echo 'Name Error'; exit(); } if($id = $_POST['id']){ preg_match("/^[0-9]+$/",$id) or die('ID Error'); } //写真アップロード処理    for ($i = 0; $i < 4; $i++) { if ( $_FILES["upfile"]["size"][$i] === 0 ) { $img_filename[$i] = "no_image.jpg"; } else { $file_nm = $_FILES['upfile']['name'][$i]; $filename = $_FILES['upfile']['name'][$i]; $extension = pathinfo($file_nm, PATHINFO_EXTENSION); $tmpFilename = $_FILES['upfile']['tmp_name'][$i]; $imgDir = 'img'; $thumbnailDir = 'thumbnail'; list($width,$height)=getimagesize($_FILES['upfile']['tmp_name'][$i]); //ファイル名 $img_filename[$i] = $_POST['cast_id']."_$i". "." . $extension; # ファイルを移動 $destFilename = $imgDir . "/" . $img_filename[$i]; move_uploaded_file($tmpFilename, $destFilename) or die("Failed to upload $filename"); #画像比率 $new_width = 100; $rate = $new_width / $width; $new_height = $rate * $height; # 次にファイルをリサイズしてサムネイル用のディレクトリに保存する $thumbnailFilename = $thumbnailDir . "/" . $img_filename[$i]; exec("convert -resize {$new_width}x{$new_height}! $destFilename $thumbnailFilename", $result, $status); ($status == 0) or die ("Failed to create thumbnail image"); } $photo[$i] = $img_filename[$i]; } ?> よろしくお願い致します。

    • 締切済み
    • PHP
  • PDFをアップロードする際にjpgサムネイルを作成したい

    PDFファイルをアップロードする際にJPGでサムネイルを作りたいのですが、 ImageMagickを使ってやりたいと思っているのですが、全然うまくいきません。まったくの無知でいろいろなサイトを見て調べたのですが、いまいちわかりません。 どのように書けばうまくいくのでしょうか。 ちなみに下がサムネイルを作るコードです。 $base_pdf = "$P_PHOTOTMP$pdffile1";//アップロードしたPDFファイル $thumb_pdf = "$P_PHOTOTMP$pdfthumb";//PDFファイルから作るサムネイルパス $option = "-resize 300"; $cmd = "/usr/bin/convert $base_pdf $option $thumb_pdf"; exec($cmd); PDFのアップロードはうまくいくのですが、サムネイルを作ることができません。 レンタルサーバは「チカッパ」を使っています。 ImageMagickのパスは「/usr/bin/convert」です。 初心者でもわかるように簡単に説明していただければ幸いです よろしくお願いします。

    • 締切済み
    • PHP
  • upload.php内のページ転送について

    header Locationの転送について教えてください。 PHPファイル内で画像プレビューを表示させ ページ転送を行いたいです。 しかし、プレビューが表示される部分に 転送先の<header>(html5)の内容が表示されてしまいます。 どこが悪くてどう直せば良いのでしょうか? どなたか教えてください。 <?php header("Location: http://www.********.com/"); ?> <?php //前にアップロードされた写真のファイル名 $postPhotoName = $_POST["postPhotoName"]; $result = false; if($_FILES['img']['name'] == "") { die("ファイルがないぜよ。"); }else{ //アップロードされたファイルの情報を取得 $fileName = basename(date("U")."-".$_FILES['img']['name']); $fileType = $_FILES['img']['type']; $fileTmpName = $_FILES['img']['tmp_name']; if(!preg_match("/jpeg/",$fileType)){ unlink($fileTmpName); die( "jpegじゃないぜよ。"); }else{ //ファイルの保存 if (!move_uploaded_file($fileTmpName, 'thumbimg/' . $fileName)) { die('保存にしっぱいしたぜよ。'); } else { //サムネイル作成 include('class.image.php'); list($width, $height, $type, $attr) = getimagesize('thumbimg/'.$fileName); $thumb = new Image('thumbimg/'.$fileName); $thumb->name('thumb-'.basename($fileName,".jpg")); if($width>$height){ if($width > 380) $thumb->width(380); }else{ if($height > 400) $thumb->height(400); } $thumb->save(); $result = true; } } } if($result == true){ ?> <img src="<?php echo 'thumbimg/thumb-'.$fileName;?>"> <input type="hidden" value="<?php echo $fileName?>" name="postPhotoName" id="postPhotoName"> <?php }

    • 締切済み
    • PHP
  • ドライビングポジジョンメモリーの要領で写真をリサイズしたい!

    写真のリサイズソフトを出来ればフリーで探しています。 当方の希望する用途は指定サイズ、圧縮率等をあらかじめ数パターン登録しておき、リサイズの際にパターンを選んで変換したい。 例えば、携帯に写メを送る為のリサイズ。PCでメールを送るためのリサイズ。HPに使うあらかじめ決められたサイズ。といった登録を選ぶだけでリサイズ完了させたい。その都度リサイズ設定ではサイズを忘れてしまいます。

  • swfファイルの横幅をと表示位置の調節方法またはASスクリプト

    横1800px縦525pxのFlashを製作しユーザーのウィンドウサイズに合わせて表示の仕方を調節したいのですがASに詳しくないのでアドバイスお願いします。 やりたいこと:swfをウィンドウサイズあわせて横幅をリサイズし表示させたいと思っています。 リサイズの仕方も、どのサイズでもちょうど真ん中を中心として左右を切り捨てる感じにしたいのです。 (スクロールなし) あと表示もどのサイズでも真ん中を中心に表示させたいと思っています。 アドバイスお願いします。 バージョン:Flah CS3 ActionScript3.0です。 ActionScript2.0でもいいのでよろしくお願いします。

  • フォトショップのアクションにおける変形について

    お世話になります。 Photoshop CS5 にて異なるサイズの画像(レイヤー)をアクションを使って 決まったサイズ(例えば縦200px横200px)にリサイズしたいのですが、 登録後アクションを実行してみるとサイズの指定はアクション登録時の サイズ変更比率(%)での登録なってしまっていて、毎回異なった結果 (サイズ)となってしまいます。(元の画像サイズが毎回違うため) どうにかして、ピクセル固定でアクションの登録出来ればと思っています。 また、上記が無理な場合は、代案がありましたらご教授願いたく思います。 どうぞよろしくお願いいたします。

  • 必要なタイルのインデックスの求め方

    タイトル解りにくく申し訳ありません。 現在サムネイルを表示するような画面プログラムを組んでいます。 サムネイルとサムネイルの間に指定ピクセルでボーダーを描画しています。 例えば サムネイルを表示するエリアが横320px、縦320pxで 各サムネイルが縦横106px、ボーダー1px、 表示する座標の左上を0、0 右下を319,319とすると 012 345 678 と9枚並ぶ感じです。 表示に必要な左上のインデックスは0で、表示に必要な右下のインデックスは8です。 最初と最後のボーダーは出さず、サムネイル内の間だけボーダーを出してます。 それをスクロールさせ、 表示する左上座標を0,100、右下座標を319,419等に変更した際に 必要な右上のインデックスと左下のインデックスを計算する式を どのように組めば良いのか悩んでいます。 よろしければアドバイスお願いいたします。

  • 外部swfを重ならないように表示したいです。

    FLASH初心者です。 二つの大小異なるサイズの読み込み用MCを用意して、 並んでいるサムネイルをクリックすると、その読み込み用MCに大きな写真と小さな写真を外部swfで読み込むようにしたいのですが、二つの読み込み用MCが重なっているので、表示が重なってしまいます。 大きい(小さい)写真のサムネイルをクリックすると、読み込み用MCに表示されている小さい(大きい)サイズのswfが消え、なおかつ前面に外部swfを表示する方法を探しています。 サムネイルのボタンインスタンスには、 on (release) { loadMovie ("pic1.swf", "_root.change"); } としています。 読み込み用MCには、change(小さい)、change2(大きい)と名前を付けています。 どなたか知恵を貸してください。 よろしくお願いします。

    • ベストアンサー
    • Flash