つい最近Laravelの勉強を始めたばかりなのですが、以下のコードを見て疑問に思いました。
php
1//HelloController.php 2<?php 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6 7global $greeting; 8$greeting = "hello"; 9 10class HelloController extends Controller 11{ 12 public function hello() { 13 global $greeting; 14 echo $greeting; 15 } 16}
php
1//web.php 2<?php 3Route::get('hello', 'HelloController@hello');
アクセスするとただ"hello"と出力するだけのものなのですが、HelloController.phpの中に変数のglobal宣言が2つあると思います。2つ目の関数内にあるglobal宣言の意味はわかります。しかし、最初のglobalの宣言が必要な理由がわかりません。確かに、1つ目のglobal宣言がないと"hello"が出力されませんでした。
しかし、以下のようなLaravelなしの普通のコードでは、1つ目のglobal宣言がなくても"hello"が出力されます。
php
1//withoutLaravel.php 2<?php 3namespace App\Http\Controllers; 4 5//globalコメントアウト 6// global $greeting; 7$greeting = "hello"; 8 9class HelloController 10{ 11 public function hello() { 12 global $greeting; 13 echo $greeting; 14 } 15} 16 17$controller = new HelloController(); 18$controller->hello();
最初はnamespaceの関係かとも思いましたが、withoutLaravel.phpにもnamespaceを記述しても特に結果が変わらなかったのでわけがわからなくなってしまいました。
なぜLaravel側のコードでは、1つ目のglobal宣言が必要なのでしょうか?
ご回答よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/28 12:32