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

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

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

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

Q&A

解決済

1回答

3699閲覧

【phpstan】静的解析のエラー解消について (PHPDoc tag @param has invalid value)

jirou6699

総合スコア5

PHP

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

0グッド

0クリップ

投稿2022/04/23 01:45

やりたいこと

phpunitを使用して静的解析をしていますが、以下のエラー解決ができる困っている状況です。
考え方・対応方法などご教示いただけますしょうか。

terminal

1 2 ------ -------------------------------------------------------------------------------------------------------------------------------------- 3 Line src/Player.php 4 ------ -------------------------------------------------------------------------------------------------------------------------------------- 5 13 PHPDoc tag @param has invalid value (array<int,array<int,int|string>>): Unexpected token "\n * ", expected variable at offset 50 6 ------ --------------------------------------------------------------------------------------------------------------------------------------

コード

抽象クラスでUserTypedを設定しプレーヤーに継承し、
トランプ52枚からランダムに2枚取得した$getHandをリターンしています。

$this->trumpCards = ['ハート', 'A'], ['ハート', 2],['ハート', 3], ['ハート', 4], .......(トランプ53枚の配列)

$getHand = [['ハート', 'A'], ['スペード', 2]];
($getHandの要素は2つですが、array_randを使うので処理ごとに変化)

php

1<?php 2 3namespace blackJack; 4 5require_once('UserType.php'); 6 7class Player extends UserType 8{ 9 /** 10 * @param array<int,array<int,int|string>> 11 * @return array<int,array<int,int|string>> 12 */ 13 public function getHand(): array 14 { 15 $randomCards = array_rand($this->trumpCards, 2); 16 $getHand = []; 17 foreach ($randomCards as $card) { 18 $getHand[] = $this->trumpCards[$card]; 19 } 20 return $getHand; 21 }

調べてみた事・思ったこと

PHPDoc tag @param has invalid value ......
色々と記事を見ていますと、下記のようなエラーはそんなに難しくなく記述のミスで指摘される事が多いような印象です。

ただ、理解ができていないのはUnexpected token "\n * "の部分です。
予期しないトークンが使用されているようですが、そのトークンというのが「" "」なのか?
わからず、例えそうだとしてもコード上で使っていないのでどう修正すればいいのか、、、、という状況です。
@paramや@returnの周辺を変更してみましたがうまくいかずご教示いただけないでしょうか。

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

@param array<int,array<int,int|string>>

こちらを削除してください

ただ、理解ができていないのはUnexpected token "\n * "の部分です。

@param で対応する仮引数名が現れるべきところに "\n * "、つまり改行文字、半角スペース、アスタリスク、半角スペースと続く文字列が現れていることを指摘されています。

PHPDoc は元々 phpDocumentor というツールで使われているコードへの注釈記法で、現在では静的解析器など phpDocumentor 以外のツールでも広く利用されています。各ツールの間でこの解釈方法はまだ標準化されてはいませんが(PSR-5 及び PSR-19 と呼ばれる標準化の取り組みは以前から続いている)、おおむね phpDocumentor のマニュアルに記載されている記法・構文が各ツールで踏襲されています。

https://docs.phpdoc.org/3.0/guide/references/phpdoc/tags/param.html#param

The @param tag is used to document a single argument of a function or method.
@param [<Type>] [name] [<description>]
it MAY contain a Type
The name of the argument MUST be present
The description is OPTIONAL

こちらの phpDocumentor のマニュアルの説明通り、@param は関数やメソッドの各引数について注釈するための PHPDoc のタグです。
またその構文については、「@param 型名 仮引数名 説明分」の順に記述するよう定められており、型名(Type)と説明文(description)の指定は任意ですが、対応する仮引数名(name)、つまり複数あり得る関数やメソッドの引数のうちどの引数を注釈するものなのかの指定は必須です。

お書きになられた @param の指定では仮引数名の指定が型名の後にないため、@param の構文として誤っており、ツールが解釈できない状態です。
しかしその PHPDoc ブロックの書かれた getHand() の定義を見ると、そもそもこのメソッドは引数をとらないメソッドとして書かれているようです。注釈すべき引数がないので、@param は必要ありません。単にその @param の行を削除すればそちらのエラーは解消されます。

投稿2022/04/28 17:33

sji

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問