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

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

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

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

Q&A

解決済

1回答

637閲覧

PHPのアロー演算子(->)について

g-prg

総合スコア14

PHP

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

0グッド

0クリップ

投稿2019/05/25 05:38

プログラミング初学者です。
アロー演算子を使った式の意味がよくわからず困っています。

アロー演算子を使った式って
(インスタンス名)->(プロパティ名)
(インスタンス名)->(メソッド名)
の場合に使わるものだと思っていました。

ただ、例えば
https://readouble.com/laravel/5.5/ja/validation.html?_fsi=CoAdJA8k#working-with-error-messages
のエラーメッセージの操作の章で

指定フィールドの最初のエラーメッセージ取得
指定したフィールドの最初のエラーメッセージを取得するには、firstメソッドを使います。

$errors = $validator->errors();
echo $errors->first('email');

と書かれています。

2行目って
echo (変数)->(プロパティ名 or メソッド名)
っていうことですよね?

アロー演算子はこのように
(変数)->(プロパティ名 or メソッド名)
でも使われる演算子ということでしょうか??

それともPHP言語において、変数がインスタンスの役割を持つということでしょうか??

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

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

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

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

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

papinianus

2019/05/26 22:33

アロー演算子を使った式って (インスタンス名)->(プロパティ名) (インスタンス名)->(メソッド名) こちらのパターンの想定コードを例示していただけませんか
g-prg

2019/05/28 05:23

返信が遅くなってしまって申し訳ありません。 この質問は以前からなかなか->を使うコードがよく理解できておらず、たまたま $errors = $validator->errors(); echo $errors->first('email'); というコードを見た際に、 どういう意味だったか理解できなかったので、投稿させていただきました。 想定コードというのが、私が疑問に感じたコード、またはプログラミングにおいて書いていた際につっかかったコードという意味であれば、上記のコードが (インスタンス名)->(メソッド名) の想定コードになります。 想定コードの意味合いが違っていたら申し訳ありません!
papinianus

2019/05/28 09:21

解決してるのですが、どういうのだとしっくり来るのか知りたかったです。こうであるはず、でも違う、なはずで、その差を埋めるには理想が知りたかった
guest

回答1

0

ベストアンサー

変数にインスタンスが設定されていればそのように使えます。

php

1<?php 2class hoge{ 3 function hello(){ 4 echo 'Hello'; 5 } 6} 7 8$a = new hoge; 9$a->hello();

Laravelでしたらdump()やdd()でその変数を確認してみては(メソッドの確認ではなくインスタンスかどうかの確認)。
「どこでどのようにインスタンスが設定されているか」はLaravelのコア部分のコードを追っていく必要がありますが、「インスタンスが格納されているからアロー演算子でプロパティやメソッドにアクセスできる」というのは変わりません。

投稿2019/05/25 05:48

m.ts10806

総合スコア80850

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

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

g-prg

2019/05/25 06:11

わかりやすいご回答ありがとうございます! 本当に私の理解ができていないためで申し訳ないのですが、 $errors = $validator->errors(); って$validatorというインスタンスのerrors()関数にアクセスして、それを変数$errorsに代入しているという意味で捉えています。 つまり変数$errors中身はerrors()という関数だと思っています。 格納されているのはインスタンスではなく関数なのかなって思っているということです。 $errors = $validator->errors(); においてインスタンスが格納されたと考えていいのでしょうか? (関数の式内にインスタンスが設定されている?そんなことはあるのでしょうか?) それとも全く別なところで$errors内にインスタンスが設定されている可能性があるということでしょうか?(これだと1行目に$errors = $validator->errors();書いた意味って、、?) 理解ができておらず申し訳ありません。。
m.ts10806

2019/05/25 06:15

いいえ。変数に関数そのものは保持しません。「関数の実行結果」です。 function fuga(){ return "test"; } $b = fuga(); とした場合と同じです。 回答に書いてますが、その変数をデバッグしてください(Laravelならdd() 別にvar_dump()でも良いですけど)
papinianus

2019/05/26 22:32

mts10806様 いたずらに混乱させるかもしれないですが、「この場合は変数に関数そのものは保持していません」などにしたほうが良いように感じました。考慮済でしたらすみません
m.ts10806

2019/05/26 23:54

papinianusさん 悩ましいところですね。 関数保持してるとしても実際は変数が保持しているオブジェクトが持ってるので直接保持しているとは言い難いかなと(そういう意味じゃなかったらすみません) 確かにクラスになるとプロパティかメソッドかわかりにくくなるところではあるのですけど、そこはミニマムコード自分で色々試してもらったほうが理解が深まりそうです
g-prg

2019/05/28 03:17

返信が遅れて申し訳ありません。 「関数の実行結果」という言葉ではっとさせられました! 基本を忘れて、勝手に「$validator->errors();はerrorsという関数(式)を取り出してて、それを$errorsに代入してる」と勘違いしてました。 $validator->errors()の実行結果を$errorsに代入してるということですもんね。 やっぱり基本は大切ですね。。
m.ts10806

2019/05/28 03:40

はい。その通りです。 理解につながったようで何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問