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

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

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

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

Q&A

解決済

2回答

666閲覧

return false; がエラーになってしまう

yukkuri_55

総合スコア240

PHP

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

0グッド

0クリップ

投稿2023/04/22 11:29

実現したいこと

ソースコードに return false; を入れたい

前提

ソースコードのほかの機能は全部きちんと動いてる

発生している問題・エラーメッセージ

エラーはでない、return false; の false の部分に波線がでる。

どこにエラーが、隠れているのかわからない。

該当のソースコード

php

1<?php 2 3ini_set('display_erros',true); 4require_once '../dbconnect.php'; 5 6class UserLogic 7{ 8 /** 9 * ユーザーを登録する 10 * @param array $userData 11 * @return bool $result 12 */ 13 public static function createUser( $userData ) 14 { 15 $result = false; 16 $sql = 'INSERT INTO users( name, email, password ) 17 VALUES ( ?, ?, ? )'; 18 19 // ユーザデータを配列に入れる 20 $arr = []; 21 $arr[] = $userData['username']; 22 $arr[] = $userData['email']; 23 $arr[] = password_hash( $userData['password'], PASSWORD_DEFAULT ); 24 25 try { 26 $stmt = connect()->prepare( $sql ); 27 $result = $stmt->execute( $arr ); 28 } catch (\Exception $e){ 29 echo $e->getMessage(); 30 return $result; 31 } 32 33 34 35 return $result; 36 } 37 38 39 40 41 42 43 44 /** 45 * ログイン処理 46 * @param string $email 47 * @param string $password 48 * @return bool $result 49 */ 50 public static function login( $email, $password ) 51 { 52 // 結果 53 $result = false; 54 // ユーザーをemailから検索して取得 55 $user = self::getUserByEmail( $email ); 56 57 if( !$user ) 58 { 59 $_SESSION['msg'] = 'emailが一致しません。'; 60 return $result; // false; 61 } 62 63 // パスワードの照会 64 if( password_verify( $password, $user['password'] ) ) 65 { 66 // ログイン成功 67 session_regenerate_id(true); // セッションハイジャック対策 68 $_SESSION['login_user'] = $user; 69 $result = true; 70 return $result; 71 } 72 73 $_SESSION['msg'] = 'パスワードが一致しません。'; 74 return $result; // false; 75 } 76 77 78 79 80 81 82 /** 83 * emailからユーザーを取得 84 * @param string $email 85 * @return array bool $user | false 86 */ 87 public static function getUserByEmail( $email ) 88 { 89 // SQLの準備 90 $sql = 'SELECT * FROM users WHERE email = ?'; 91 92 // email を配列に入れる 93 $arr = []; 94 $arr[] = $email; 95 96 // SQLの実行 97 try { 98 $stmt = connect()->prepare( $sql ); 99 $stmt->execute( $arr ); 100 // SQLの結果を返す 101 $user = $stmt->fetch(); 102 return $user; 103 } catch (\Exception $e){ 104 echo $e->getMessage(); 105 return false; // << false がいけない? 106 107 $user = false; 108 return $user; // << これも $user がいけない 109 } 110 } 111 112} 113

試したこと

$user = false; として、
return $user; としたが、これも波線がでる。

補足情報(FW/ツールのバージョンなど)

OS:Windows10
ブラウザ:クローム
エディタ:VS Code

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

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

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

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

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

maisumakun

2023/04/22 12:03

出た波線にマウスを重ねると詳細が出てきませんか?
yukkuri_55

2023/04/22 12:34

マウスを重ねると Return value of getUserByEmail() is expected to be of type array, bool returned const bool false とでたので、 /** * emailからユーザーを取得 * @param string $email * @return array bool $user | false */ を /** * emailからユーザーを取得 * @param string $email */ に変更したら 波線はでなくなりました。
yukkuri_55

2023/04/22 12:45

ベストアンサーに選びたいので、レスを返していただけないでしょうか?
guest

回答2

0

ベストアンサー

@return array bool $user | false

この記述はPHPDocのreturnのデータ型を記述する書式として正しくありません。

@return <データ型> <コメント> が書式になるため、arrayがデータ型、bool $user | false がコメントとして解釈されています。

取得したuserの配列、失敗時はfalseを返すという設計なのであれば下記のような書式になります。

@return array|false <コメント>

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

投稿2023/04/22 13:26

Eggpan

総合スコア2727

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

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

yukkuri_55

2023/04/22 23:03

勉強になりました。 /** * emailからユーザーを取得 * @param string $email * @return array bool $user | false */ を /** * emailからユーザーを取得 * @param string $email * @return array|false */ に変更したら、期待どおりになりました。 解決しました。ありがとうございました。
guest

0

false でリターンする、ということは、その関数の戻り値の型は論理型となります。
が、別のところでreturn $user となってますが、この$userと言うのは論理型なんでしょうか

投稿2023/04/22 12:03

y_waiwai

総合スコア87747

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

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

yukkuri_55

2023/04/22 12:40

$user は SQLの実行結果 配列(array)を返すと思います。 でも、失敗すると false を返したいのですが、まずいでしょうか? PHPは初心者レベルなので、すいません。 動画を参考にしながら勉強しているのです。 他の手段があるでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問