今、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 ・・・ について初学者にでもわかるように解説していだけないでしょうか? よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー