質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

3949閲覧

メソッドと呼び出しの順序

goforward

総合スコア705

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/05/14 14:26

編集2017/05/14 15:23

プログラムは上から順番に実行されていくのでまずメソッド private function _validateUpload() {

}を定義して後の行で呼び出すの
PHP{
// error check
$this->_validateUpload();ではないでしょうか?今回のプログラムはぎゃくになっていないでしょうか? 理由がききたいです。宜しくお願い致します。

ImageUploader.php

php

1 2<?php 3 4namespace MyApp; 5 6class ImageUploader { 7 8 public function upload() { 9 try { 10 // error check 11 $this->_validateUpload(); 12 13 // type check 14 // save 15 // create thumbnail 16 } catch (\Exception $e) { 17 echo $e->getMessage(); 18 exit; 19 } 20 // redirect 21 header('Location: http://' . $_SERVER['HTTP_HOST']); 22 exit; 23 } 24 25 private function _validateUpload() { 26 27 } 28} 29

index.php

php

1?php 2 3ini_set('display_errors', 1); 4define('MAX_FILE_SIZE', 1 * 1024 * 1024); // 1MB 5define('THUMBNAIL_WIDTH', 400); 6define('IMAGES_DIR', __DIR__ . '/images'); 7define('THUMBNAIL_DIR', __DIR__ . '/thumbs'); 8 9if (!function_exists('imagecreatetruecolor')) { 10 echo 'GD not installed'; 11 exit; 12} 13 14function h($s) { 15 return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); 16} 17 18require 'ImageUploader.php'; 19 20$uploader = new \MyApp\ImageUploader(); 21 22if ($_SERVER['REQUEST_METHOD'] === 'POST') { 23 $uploader->upload(); 24} 25 26?> 27<!DOCTYPE html> 28<html lang="ja"> 29<head> 30 <meta charset="utf-8"> 31 <title>Image Uploader</title> 32 <style> 33 body { 34 text-align: center; 35 font-family: Arial, sans-serif; 36 } 37 </style> 38</head> 39<body> 40 41 <form action="" method="post" enctype="multipart/form-data"> 42 <input type="hidden" name="MAX_FILE_SIZE" value="<?php h(MAX_FILE_SIZE); ?>"> 43 <input type="file" name="image"> 44 <input type="submit" value="upload"> 45 </form> 46 47</body> 48</html>

リンク内容

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

がると申します。

「プログラムは上から順番に実行されていく」は正しいのですが。
classは「宣言」なので、実際に使われていくのは、このclassがどこかで「newされてインスタンスが作成された後」になります。

なので、実行順番としては
・classが宣言された(ので、そのclassの中にある upload()メソッドや _validateUpload()メソッドも宣言された:ので、使用可能になる)
が、コードから見て取れる唯一の情報になります。

恐らく、別のコードで

PHP

1 2// 3$obj = new ImageUploader(); 4// 5$obj->upload(); 6

といった類のコードが出てくるか、と思うので。
そのコードが出てきた時に
・$objにインスタンスが代入される
・$obj(ImageUploader インスタンス)のupload()メソッドが実行される
→upload()メソッドは「すでに宣言されている」ので、利用可能
→upload()メソッドの中で呼ばれている _validateUpload()も「すでに宣言されている」ので、利用可能

となります。

以上が基本的な流れの説明になりますが、如何でしょうか?

投稿2017/05/14 14:39

gallu

総合スコア506

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

goforward

2017/05/14 15:16 編集

はい、丁寧な質問ありがとうございます。思い出しました。これは$thisですのでインスタンスされた$objの_validateUpload()だということでつながるということでしょうか? これがもしself::だったら順番的におかしいということでしょうか? http://note.onichannn.net/archives/648
goforward

2017/05/14 15:26

■self:: 自クラスのプロパティ、及びメソッドへの静的アクセス。 ■$this 自分自身のオブジェクトを指す。より $thisがある時点でオブジェクトつまりインスタンスなので$obj= new ImageUploader();を探しに行くということでしょうか?
goforward

2017/05/14 15:28 編集

頭がぼーとしてきましたので睡眠をとった以降にまたゆっくり考えさせていただきます
gallu

2017/05/15 12:35

がるです。 > これがもしself::だったら順番的におかしいということでしょうか? 特におかしくはないですね。 ・classが宣言された(ので、そのclassの中にある upload()メソッドや _validateUpload()メソッドも宣言された:ので、使用可能になる) ・self::upload()メソッドが実行される  →upload()メソッドは「すでに宣言されている」ので、利用可能  →upload()メソッドの中で呼ばれている self::_validateUpload()も「すでに宣言されている」ので、利用可能 という流れになりますので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問