🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Framework

Frameworkは、アプリケーションソフトを開発する際に、一般的な機能をより簡単に、より早く完了させる事を目的とした、ソフトウェアやライブラリのセットを指します。開発にフレームワークを使用する事で、追加で必要となる機能だけを開発するだけで済む為、開発効率の向上が見込めます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

5回答

5247閲覧

パーフェクトphpの7章の、オートロード関数spl_autoload_register()の仕組みについて。

退会済みユーザー

退会済みユーザー

総合スコア0

Framework

Frameworkは、アプリケーションソフトを開発する際に、一般的な機能をより簡単に、より早く完了させる事を目的とした、ソフトウェアやライブラリのセットを指します。開発にフレームワークを使用する事で、追加で必要となる機能だけを開発するだけで済む為、開発効率の向上が見込めます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

1クリップ

投稿2019/12/09 03:39

前回質問した時とあんまり進捗してないんで恥ずかしいのですが……
恥を忍んで伺います……
オートロード関数のspl_autoload_registerの働きについて。
宣言したあとどのタイミングでクラスが呼び出されて読み込まれるのかいまいちわからなくて……
ソースは前に質問した"パーフェクトphpの7章の例題の変数の中身が知りたい。"と一緒です。

newされた時と、repuireされたクラスの継承元に帰るとき?に呼び出しされるのでしょうか?

netbeansで実行過程を眺めるのですが、あちこち飛んで、わからないことが多すぎてついていけません。
SQL文も高度なもので解説もされてないのでわからないです。

オブジェクト指向についてはなんとなーく理解しました。
値の保持と実行を利用しやすい形にまとめた物って感じであってますよね?
何かphpとsqlの初級と中級の間を取り持ってくれる、パーフェクトphpを読破できる参考書なり参考資料なりがほしいで出来れば紹介してください。
どうかお願いします。

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

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

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

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

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

guest

回答5

0

spl_autoload_register

【パーフェクトPHP の spl_autoload_register について】

spl_autoload_register(array($this, 'loadClass'));

spl_autoload_register は、「分かる人には分かりますが、分からない人には分からない」関数の一つですが、機能別に見ていくと、分かりやすいです。

  • spl_autoload_register がやっていること

loadClass を、PHP が決めた場所 に 登録 します
spl_autoload_register がやっていることは、これだけです

  • loadClass がやっていること

 public function loadClass($class) {...}

core, models フォルダ内のクラスを require します
(controllers フォルダは、対象外)

  • PHP がやっていること

 サンプルコードに書かれていないことです ← ここが分かりにくい原因
処理の流れ (1/5)↓ には書かれています

require されてないクラスが、newextends された時、
登録された loadClass を 実行します

require されてないクラスが、require されます (オートロード)

  • 用語の理解は、後でも大丈夫です

__autoload キュー = PHP が決めた場所 (spl が決めた場所)
コールバック関数 = loadClass のこと (spl_autoload_register に、引数として渡す関数)

 

  • その他

直観的に理解するには、
パーフェクトPHP デバッグ の 処理の流れ (1/5) | ユーザ登録機能作成 を見るのが一番簡単です。
NetBeans デバッグ方法 loadClass デバッグ例 も役立ちます。

退会した質問者さんの「spl_autoload_registerの働き (オートロード) の理解」は正しいです。


【Composer のオートロードについて】

パーフェクトPHP の サンプルコードに、Composer は使いません。

パーフェクトPHP の spl_autoload_register の質問には、
Composer のオートロードについての回答やコメントが付きます。


パーフェクトPHP の サンプルコードは、フレームワークの作成 がテーマなので、
プラグインやテンプレートを使わない 素のPHP で、フレームワークを実現しています。

オートロードも、素のPHP で書かれています。

Composer を使ってしまうと、フレームワークを理解する という目標がズレてしまいます。
(ブラックボックスになるか or 難易度が高くなります)
変更箇所も多くなります。

Composer についての回答やコメントは、学習する人を混乱させますが、
回答者などが、パーフェクトPHP を読んでいないので、仕方ありません。

投稿2019/12/26 02:54

編集2019/12/30 01:28
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

urlAddChange

2020/04/19 06:54 編集

--- url変更 --- パーフェクトPHP デバッグ (処理の流れ (1/5) | ユーザ登録機能作成) 全5パターン https://perfectphp-debug.netlify.com/debug-02-1.html パーフェクトPHP デバッグ (チェックポイント) https://perfectphp-debug.netlify.com/debug-01.html パーフェクトPHP デバッグ (その他) 環境設定等 https://perfectphp-debug.netlify.com/debug-03.html パーフェクトPHP デバッグ (NetBeans デバッグ方法) https://perfectphp-debug.netlify.com/debug-04.html
urlAddChange

2021/04/03 06:40 編集

--- url追加 --- 【動画 (YouTube)】 パーフェクトPHP をデバッグしました (デバッグ例 基本編) オートロード https://youtu.be/F-QJCXH2Xm0 パーフェクトPHP をデバッグしました (デバッグ例 応用編) CSRF対策 https://youtu.be/htohdTY26D0 パーフェクトPHP をデバッグしました (デバッグ例 応用編) アウトプットバッファリング https://youtu.be/U58DL8_iAvI パーフェクトPHP をデバッグしました (デバッグ例 応用編) DbManagerクラス https://youtu.be/najYeNBB1xM
guest

0

spl_autoload_registerの働き (オートロード) の理解について
問題無いと思います。

  
かん違いする人がいるかもしれないので、正確には
パーフェクトPHP デバッグ 処理の流れ (1/5)

  • 最初の spl_autoload_register ClassLoader 'loadClass'
  • その後の 複数の loadClass

を、見てください。


複数の loadClass が、

  • newされた時
  • repuireされたクラスの継承元に帰るとき

に呼び出しされます。

投稿2019/12/15 05:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

回答です。

spl_autoload_registerの働き (オートロード) の理解について
問題無いと思います。

SQL について
SQL 第2版 ゼロからはじめるデータベース操作
国内では、ミックさんの本(複数)が定番です。
データベースの考え方 が書かれている点が、他の本との違いです。


パーフェクトPHP (7章、8章、サンプルコード) の疑問点について

こちらのサイトの
コメント欄に、疑問点を書いてください。

マンツーマン で対応します。

NetBeans IDE デバッグ機能 をすすめましたが、サポートが不足していました。

解決策を考えていたので、回答が遅れました。
申し訳ありません。

投稿2019/12/11 07:43

編集2019/12/14 02:57
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/12/14 01:40

すみません。 お返事ありがとうございます。 関数件のスッキリしました。 これでぐっすり眠れます。 本もとっても参考になります。 ベストアンサーをつけても回答をくださり、そのお気遣いを感謝いたしますm(_ _)m でも、プロの方にお伺いしたところ、この業界は独学では難しいし、趣味ならいいんですけど…… プログラムを書く時代じゃない(語弊があるかもしれませんが、自動生成やアプリを利用するという意味です)とご教示をいただき、向いてないと思ったら諦めるのも手だと…… なので、私はいなくなりますが、親切なteratailの皆さんのことは忘れません。 ありがとう、さようなら。
guest

0

ベストアンサー

値の保持と実行を利用しやすい形にまとめた物って感じであってますよね?

ここで「はい」と言ってしまうと良くないので「そうとは限らない」という回答にとどめます。
実装者や設計によってどのような役割やメリットが与えられるか違ってきます。
それこそ「デザインパターン」をキーワードに調べてみるとより深く知ることができるのではないかと思います(PHPに限った話ではないですね)

それを踏まえた上で、

netbeansで実行過程を眺めるのですが、あちこち飛んで、わからないことが多すぎてついていけません。

上記が「あちこち飛んでもきちんと意味を分かって解釈できる」くらいになると、「オブジェクト指向を理解できた」と言えるかもしれません。

何かphpとsqlの初級と中級の間を取り持ってくれる、パーフェクトphpを読破できる参考書なり参考資料なりがほしいで出来れば紹介してください。

本を読むための本を求めている時点で読むことが目的になっています。
実際にはPHPを用いて開発していきたいのですよね?Webアプリケーションを作っていきたいのですよね?

でしたらやはりPHPマニュアルの活用は必須ですし、エラーをきちんと読むこと、デバッグをすること、など、開発する上で必要な取り組みをしていくべきと思います。

パーフェクトPHPも確かに素晴らしい書籍ではありますが、対応するPHPのバージョンは新しいものではないため、業務や実務で使えるかというと必ずしもそうではありません。

実際の現場では余程レガシーなシステムを除いてはフレームワークが導入されていますし、現場のルールに則って開発が進められています。
ドキュメントやコードを読んでそのルールを理解し、それに則って書いていける力をつけていく必要があります。

ので、「読破するために何かを探す」のではなく、「これまで学習してきたことを活かして何かを作る」方向にシフトしていった方が良いと思います。
使ってみて作ってみて分かることも多いです。
人に説明することなんて、自身の理解度を試すにはもってこいですよ。

インプットばかりでは何も実感できませんので、アウトプットを考えてみましょう。

投稿2019/12/09 04:30

m.ts10806

総合スコア80875

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

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

退会済みユーザー

退会済みユーザー

2019/12/09 04:49

オブジェクト指向は一言では語れないものなのですね。 もう、オブジェクト指向は簡単には語りません。 そして、おっしゃるとおり、自分で何か実践して作っていこうという気概が足りなかったというのもその通りです。 反省します。
m.ts10806

2019/12/09 05:08

えーっと 「対して知らないのに偉そうに語るな」と言ったつもりは全くありません。 簡単ではないし一言で語るのも難しいのも事実ですが、それはプログラミング自体にも言えることです。 プログラミングの本質は問題解決にあると私は思っています。 となると、「これを作ることで何を解決できるか」を念頭において取り組む必要があります。 という前提で「読むことが目的になってるのはよくないよ」という話をしました。 正直なところ、内部構造を深くまで知ろうとするとPHPを作っているC言語のソースを追うことになります。それができる人ってそんなに沢山はいないと思いますし、そこまでやる必要はないと思いますし、そこまでやらなくても実務で十二分使えます。 「どう実行したら」「なにを得られるか」くらいを把握していれば良いですし、都度PHPマニュアルを確認するので十分です。 あっちこっち飛んだとしても、結局は必要に応じて呼び出され必要な処理をして必要な結果を返してくれているだけです。 使う側は「必要な処理って何か」を深くまで追う必要はないと思っています。 PHPの標準関数を使うときと同じですね。
guest

0

サーバ エラー?
重複投稿です。

投稿2019/12/15 05:32

編集2019/12/15 05:41
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問