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

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

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

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

Q&A

解決済

2回答

2021閲覧

php オブジェクトの取得方法が分からない

come25136

総合スコア258

PHP

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

0グッド

0クリップ

投稿2016/03/10 13:23

編集2016/03/11 13:29

現在、Google OAuthを使ったログイン機能を実装しようとしているのですが、
アカウント情報取得後の結果がオブジェクトで返って来て、どのように特定の情報だけを取得するのかわからなくて困っています
(いろいろと調べてみましたが、あまりオブジェクトの情報がなく、ざっくりとした内容の物ばかりでした)

OAuth認証にはOAuth-googleを使っています

取得したい内容はメールアドレスです↓
イメージ説明
↑の画像のコードはPHPで簡単にOAuth認証を実装するサンプル(例:GitHubログイン)をGoogle用に改良したものを使用しています

php

1<?php 2require_once '_config.php'; 3 4// ちゃんとlogin.phpからきたかどうか確認 5if (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) { 6 unset($_SESSION['oauth2state']); 7 exit('Invalid state'); 8} 9 10// 認証コードからアクセストークンを取得 11$token = $provider->getAccessToken('authorization_code', [ 12 'code' => $_GET['code'] 13]); 14 15echo $token.'\n'; 16echo 'Successfully callbacked!!'.'\n'; 17 18// トークン使って認可した情報を取得できる 19$user = $provider->getResourceOwner($token); 20 21echo '<pre>'; 22var_dump($user); 23echo '</pre>';

丸投げのような感じになってしまいましたが、色々と試した結果どうしてもわからないので質問させて頂きました。
ヒントだけでも良いので、出来るだけわかりやすく教えて下さい(_ _)

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

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

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

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

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

guest

回答2

0

ベストアンサー

ソース読みましょ.

getId getName getFirstName getLastName getEmail getAvatar toArray が使えますね.レスポンスをそのまま連想配列で欲しい時は toArray を使うみたいですが,あまり使い勝手が良いとはいえず,欲しい情報だけをスパッと抜いてくるために各種Getterメソッドが生えているんだと思います.

投稿2016/03/10 14:19

mpyw

総合スコア5223

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

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

come25136

2016/03/11 07:53

返信が遅くなりすみません。 回答ありがとうございます(_ _) $test = new GoogleUser; を実行すると、 Fatal error: Class 'GoogleUser' not found と出るのですが、これはコードの使い方が間違っているのでしょうか? (初歩的な質問ですみません。)
mpyw

2016/03/11 10:49 編集

new League\OAuth2\Client\Provider\GoogleUser($配列); あるいは use League\OAuth2\Client\Provider\GoogleUser; new GoogleUser($配列); が正しいです.が,このコードは 「GoogleUserクラスのインスタンスをあなた自身で作ってください」 という意味で提示したのではなく, 「var_dumpで確認しているそのオブジェクトはGoogleUserクラスのインスタンスなので,こういう使い方が出来ますよ,どんなメソッドがあるのか確認してください」 という意味で提示したに過ぎません.
come25136

2016/03/11 13:28

new League\OAuth2\Client\Provider\GoogleUser($user) を実行した所、 Catchable fatal error: Argument 1 passed to League\OAuth2\Client\Provider\GoogleUser::__construct() must be of the type array, null given, called とエラーが出ます。 一応検索してみましたが内容が内容だけにさっぱり分かりません。 と言うか、$配列 の部分にuserを入れるのが間違いなのでしょうか?
mpyw

2016/03/14 06:52 編集

$user 変数が未定義でNULL扱いになっているエラーのように見えますし,そもそも GoogleUser クラスのコンストラクタに GoogleUser クラスのインスタンスを渡そうとしている点でも意味不明です… どうやら回答の趣旨を勘違いされているようなのでもう一度説明しておきますが,あなたが var_dump($user); としてその出力を得ているのであれば, var_dump($user->getId()); var_dump($user->getFirstName()); のようにメソッドを生やすと欲しい値が得られますよ,という意味です. (これ以上分かりやすく説明出来ません.もしこれで分からなければ根本的にオブジェクト指向が全くわかっていないことになるので,一から勉強しなおしてください…)
come25136

2016/03/16 07:22

>(省略)のようにメソッドを生やすと欲しい値が得られますよ,という意味です. そうでしたか、どうやら根本的に勘違いしていたようです。 余談ですが、改めて日数を開けてからもう一度Qiitaの記事を読ませていただいた所凄く理解しやすかったです。 頭の中を整理することって大事ですね。 回答ありがとうございました!!(_ _)
guest

0

多次元配列というか、オブジェクトですね。emailsは、response以下に入っているようですが、protectedですので、そのままでは外部からアクセス出来ません。
oauth googleのどのオブジェクトか不明ですが、当該オブジェクトにget()などのメソッドが無いか見てみると良いかと思います。

投稿2016/03/10 13:43

amaranthine

総合スコア501

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

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

come25136

2016/03/10 14:14

回答ありがとうございます(_ _) >多次元配列というか、オブジェクトですね。 そうでしたか!てっきり多次元配列だと思っていました >get()などのメゾット http://qiita.com/mpyw/items/1cb6fc8170b6a8c8eb04 ↑これの事でしょうか?何分オブジェクトは全くの初心者なので...
amaranthine

2016/03/10 14:31 編集

質問に添付されている画像において、オブジェクトの中身をおそらくvar_dump($変数);で表示していると思うのですが、その$変数について、 = new なんちゃら;とか、何からのレスポンスを格納したはずです。そのなんちゃらのClassnなどの中にget()的なメソッドがあるのでは無いかと思います。なんちゃらを明示して頂ければ、outh googleのソースを見て回答できるかもしれません。
amaranthine

2016/03/10 14:32

と思ったら、CertaiNさんが回答してくれてますね。ひとまずtoArray()メソッドで配列に変換すれば、取りたい情報は取れるかと思いますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問