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

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

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

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

Q&A

解決済

2回答

6772閲覧

PHP 関数内の変数を取り出す。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2016/10/03 01:17

編集2016/10/03 01:31

phpで関数をセットした場合、その中の変数を取り出すにはどうすればいいですか?

function test() { global $test; $test = 'test'; } test(); var_dump($test);

このようにすればいいと思うのですが、なぜかエラーになります。

【追記】
正確にはlaravleのコントローラ内でやってるのでそれが影響してるのかもしれませんが、エラーはこんな感じです。

Undefined variable: test

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

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

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

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

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

toutou

2016/10/03 01:21

エラーとはどんなエラーでしょうか?
ttyp03

2016/10/03 01:23

試してみましたがエラーにはなりませんね。エラーの内容を提示した方がよいと思います。
guest

回答2

0

ベストアンサー

グローバル変数を利用することは意図しない場所で値が更新され、不具合の原因になる可能性があります。
関数で何らかの処理を行い、その結果を受け取る場合は戻り値(返り値)を利用するべきです。

function test() { $test = 'test'; //returnで$testを呼び出したところへ返す return $test; } //test()から返ってくる値を、$getTestで受け取る $getTest = test(); var_dump($getTest);

追記

解決済みになっていますが、質問文にあるエラーについても調べてみました。

global宣言は、その関数の外側にある同名の変数を参照することを宣言するようです。
マニュアル

global宣言した関数内で初めて生まれた変数はその関数の外側からは参照できますが、別の関数からは参照できません。
laravelのコントローラ内での処理ということなので、global宣言している関数が別の関数から呼び出されているため、呼び出し側の関数で未定義になっているのではないでしょうか。

function test() { //「関数の外側」にある$testをこの関数内で使用することを宣言 //※実際にはこの時点で「関数外の$test」は未定義 global $test; $test = 'test'; } function test2(){ //test()の処理を呼び出す test(); //test2()関数内で$testは未定義なので、出力はされない //global宣言もされていないので、「関数外の$test」も参照しない echo '[test2]'.$test; var_dump($test); } //test2()の処理を呼び出す test2(); //test2()が呼んだtest()によって、「関数外の$test」が定義されたので出力される echo '[関数外]'.$test; var_dump($test);

投稿2016/10/03 01:24

編集2016/10/03 05:56
KaedeKazane

総合スコア408

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

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

ttyp03

2016/10/03 01:33

なぜエラーになるのかの回答ではない。
退会済みユーザー

退会済みユーザー

2016/10/03 01:38

その方法だとエラーにはなりませんね。大人しく返り値使います
KaedeKazane

2016/10/03 01:53

>ttyp03さん 関数内で設定した変数の値を取り出す事が目的で、その実現のためにグローバル変数を使ってみた、という質問だと解釈して回答していました。 グローバル変数で取得する亊が目的でしたら、私の回答は的外れでしたね。 すみません。
guest

0

上位で宣言して、function内でglobalで行うのはどうでしょうか?

php

1 2$test=""; 3function test() 4{ 5 global $test; 6 $test = 'test'; 7} 8test(); 9var_dump($test);

投稿2016/10/03 01:28

A.Ichi

総合スコア4070

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問