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

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

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

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

Q&A

解決済

2回答

11974閲覧

エラーメッセージ “Stack trace:” について質問です。

blueletter5

総合スコア24

PHP

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

0グッド

0クリップ

投稿2021/07/20 05:56

今、string, float…などの「型付け」について復習しています。
以下の記述はdeclare文を書き込み「強い型付け」にしていますので
作成したコンストラクタの引数はstring型にしているためでコンストラクタに渡した引数の数値(int)「5」だとエラーが出ます。

PHP

1<?php 2 3declare(strict_types = 1); 4 5class Post{ 6 7 private string $text; 8 9 public function __construct(string $text){ 10 $this->text = $text; 11 } 12 13 public function show(){ 14 printf('%s',$this->text); 15 } 16} 17 18$posts = []; 19 20$posts[0] = new Post(5); 21$posts[1] = new Post('Hello!'); 22 23$posts[0]->show(); 24echo "<br>"; 25$posts[1]->show();

エラーメッセージ

Fatal error: Uncaught TypeError: Argument 1 passed to Post::__construct() must be of the type string, int given, called in C:\xampp\htdocs*********\object.php on line 21 and defined in C:\xampp\htdocs*********\object.php:9 Stack trace: #0 C:\xampp\htdocs*********\object.php(21): Post->__construct(5) #1 {main} thrown in C:\xampp\htdocs*********\object.php on line 9

Stack traceとは

スタックトレースとは、実行中のコンピュータプログラムにエラーが発生した際に、直前に実行していた関数やメソッドなどの履歴を表示すること。

とIT用語辞典に出ていました。

#0 C:\xampp\htdocs*********\object.php(21): Post->__construct(5) #1 {main} thrown in C:\xampp\htdocs*********\object.php on line 9

これを噛み砕くと

$posts[0] = new Post(5);

でインスタンス(コンストラクタ)に渡された引数を参照

{main} thrown in C:\xampp\htdocs*\object.php on line 9 ```で9行目すなわち __construct(string $text)の部分でstring型で型付けされた引数を参照してエラーを出した とざっとこんな感じかなと思います。 ここで疑問に感じたのは ```ここに言語を入力 #1 {main} thrown in C:\xampp\htdocs*\object.php on line 9

の行の{main} thrownについてです。この場合の{main}とは「ここがエラーの元となっている箇所だよ」
というような解釈でいいのでしょうか?

検索しても満足のいく回答は得られませんでしたし、あまり気にする箇所ではないのかもしれませんがなんとなく気になります。

{main} thrown ・・・ について初学者にでもわかるように解説していだけないでしょうか? よろしくお願い致します。

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

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

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

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

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

yambejp

2021/07/20 06:18

PHPのバージョンは?
guest

回答2

0

ベストアンサー

#0を引き起こした原因になる関数やメソッドの呼び元が#1になって、
#1を引き起こした原因になる関数やメソッドの呼び元が#2、
ってさかのぼって辿れるようになっているのが、そのStack traceです。

参考記事はJavaの例ですが、考え方は同じなので紹介します:
スタックトレース (stack trace)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

C:\xampp\htdocs*\object.php on line 9

の箇所に、最終的に処理が落ちた箇所の処理を呼び出した「元」があるので、
そこで不適切な値を引き渡していないかをチェックしてみてはいかがでしょうか。

投稿2021/07/20 06:12

編集2021/07/20 06:14
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

公式ドキュメントを読むと、
どうやら『例外』のようです。

例外処理のやつです。

There are three scenarios where a TypeError may be thrown:

[訳]
以下の場合にTypeErrorが投げられます。

  • The argument type being passed to a function does not match its corresponding declared parameter type.

[訳]
関数に(引数として)違う型が渡された場合

  • A value being returned from a function does not match the declared function return type.

[訳]
関数が返すべき型以外を返した場合

An invalid number of arguments are passed to a built-in PHP function (strict mode only).

[訳]
(strictモードにおいて)ビルトイン関数にあり得ない個数の引数を渡した場合

で、スタックトレースっていうのは文脈によると思いますが、今回のような例外であれば、
『どこからその例外が投げられているか』を追っているものです。

○○関数で呼び出された◇◇関数でさらに呼び出された△△関数で投げられています。
的な感じのです。

ヒント: 公式

...の行の{main} thrownについてです。この場合の{main}とは「ここがエラーの元となっている箇所だよ」というような解釈でいいのでしょうか?

だと思いますよ。

投稿2021/07/20 06:25

BeatStar

総合スコア4958

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問