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

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

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

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

4回答

3976閲覧

Laravelにおけるglobalの構文エラーについて

Yamachoo

総合スコア19

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/06/10 11:09

前提・実現したいこと

現在Laravelを学習するため、青本(https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF-Laravel%E5%85%A5%E9%96%80-%E6%8E%8C%E7%94%B0%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798052582)に取り組んでいます。
2章のコントローラーの利用にて、複数のアクションの利用を学習中に以下のエラーメッセージが発生しました。

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

syntax error, unexpected 'global' (T_GLOBAL), expecting function (T_FUNCTION) or const (T_CONST)

該当のソースコード

PHP

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6 7class HelloController extends Controller 8{ 9 global $head, $style, $body, $end; 10 $head = '<html><head>'; 11 $style = <<<EOF 12 <style> 13 body {font-size:16px; color:#999;} 14 h1 {font-size:100px; text-align:right; color:#eee; margin:-40px 0 -50px 0;} 15 </style> 16 EOF; 17 $body = '</head><body>'; 18 $end = '</body></html>'; 19 20 function tag($tag, $txt) { 21 return "<{$tag}>".$txt."</{$tag}>"; 22 } 23 24 class HelloController extends Controller 25 { 26 public function index() { 27 global $head, $style, $body, $end; 28 29 $html = $head.tag('title', 'Hello/Index').$style.$body.tag('h1', 'Index').tag('p', 'this is Index page').'<a href="/hello/other">go to Other page</a>'.$end; 30 return $html; 31 } 32 33 public function other() { 34 global $head, $style, $body, $end; 35 36 $html = $head.tag('title', 'Hello/Other').$style.$body.tag('h1', 'Other').tag('p', 'this is Other page').'<a href="/hello/other">go to Other page</a>'.$end; 37 return $html; 38 } 39 40 } 41} 42

試したこと

Googleやteratailなどでエラーについて検索を試みました。
syntax errorが構文エラーであることは分かり、その後の情報が手がかりだといのは分かったのですが、青本を写経している段階なので何が問題なのかが全くわからないという状況です…。

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

PHP 7.3.6
Laravle 5.8

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

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

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

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

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

guest

回答4

0

ベストアンサー

namespaceuseは省略している、としか書いていないので、7行目付近のクラス定義と最後のカッコは不要ですね。2重定義になっているのと、クラス変数にはglobalが書けないのとが合わさって構文エラーになっています。

class HelloController extends Controller {

本の通りに書くのであれば下記のようなコードになります。

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; global $head, $style, $body, $end; $head = '<html><head>'; $style = <<<EOF <style> /* bodyやらなんやら */ </style> EOF; $body = '</head><body>'; $end = '</<body><html>'; function tag($tag, $txt) { return "<{$tag}>" . $txt . "</{$tag}>"; } class HelloController extends Controller { public function index() { global $head, $style, $body, $end; $html = $head . tag('title','Hello/Index') . $style . $body // 以下略

きょうびglobalとかWordPressの変な差込みくらいでしか使わないでしょう、Laravel書籍の例でそんなハズ・・
て思って興味本位で買ってみましたけど、ホントにglobal書いてますね。
viewファイルでいいし、百歩譲ってこのファイルに書くとしたらクラス変数ですね

この本、コードの途中で改ページになってる所多々あるんですけど紙媒体でもそうなんですかね・・

解説文は悪くはなさそうですけど、コードに関しては変な所や実際に使わない使い方もあるくらいで読んだほうがよさそうです。バージョンも5.4みたいなのでちょっと古いですし。

投稿2019/06/10 12:47

Eggpan

総合スコア2727

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

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

Yamachoo

2019/06/10 12:58

ありがとうございます! 確かにこの通りにしたら出来ました。 あとわざわざこの質問のためだけに買っていただいたんですか!? 本当にありがとうございます!! ご指摘、了解いたしました。 比較的おすすめされていた書籍だったので購入したのですが、やはり最新の知識についてはもう少し公式ドキュメントなどで適宜調べていきます。 さらっと一周したら、今後の使用はやめておきます。。。
m.ts10806

2019/06/10 13:10

個人的な感想ですけど この本の作者は色々な言語やフレームワークに手を出して飽きたら次に行くスタイルだそうなので、「とりあえず現状で動けばOK」のような書き方をしている場面も少なくないです。 もちろんそれだけ様々な言語を扱えるのは素晴らしいことなのではありますが。 いずれにしても公式のドキュメントは無料で、インターネットさえつながればどこからでも確認できますので、必ずドキュメントを確認するようにすれば大きくは間違わないと思います。
Yamachoo

2019/06/10 13:15

mts10806さん、了解いたしました。 公式ドキュメントの確認する癖をしっかりと付けていきます。 いろいろとご指摘を本当にありがとうございました!
Eggpan

2019/06/10 13:19

このサイトで2、3回ほど「Laravelの青本」という単語をみまして、有名な本なのかな思ったのと、 フレームワークの書籍一冊も持ってないので、興味もあるしついでに、みたいな感じでした。 フレームワークの本でオススメってはっきり言って無いんですよね。。 コードのサンプルだとGithubで探せば色々あるのですが、 https://laravel.io のソースコードである https://github.com/laravelio/portal 推しときます。
Yamachoo

2019/06/10 13:22

なるほど。 オススメまでありがとうございます! 一通り勉強できたら、参考にさせてもらいます。 本当にいろいろとありがとうございました!
guest

0

とりあえず直すだけならヒアドキュメント構文の使い方をきちんとおさえることでエラー解消は可能かと思います。
IDE利用なら実行前にわかる構文ミスです。

ただ、既に出ているようにあまり積極活用すべきではない書籍であるのは確かなので、せめて日本語訳ドキュメントにシフトしてください。
たぶんそれぞれのバージョン含めた環境も全く同じではないと思います。

投稿2019/06/10 11:52

編集2019/06/10 11:53
m.ts10806

総合スコア80850

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

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

Yamachoo

2019/06/10 12:06

了解しました。。。 とりあえず、日本語訳ドキュメントにシフトします。 ご回答ありがとうございます。
退会済みユーザー

退会済みユーザー

2019/06/10 12:10

エラーはヒアドキュメントじゃなくて、プロパティの global だよ。 まぁほかもたくさんあるけどw
m.ts10806

2019/06/10 12:20

あ、今気づきました。 写経もちょっとできてない感じですね。 オブジェクト指向はある程度取り扱えるようにならないとフレームワークは難しいです
Yamachoo

2019/06/10 12:24

te2jiさん、mts10806さん、ご指摘ありがとうございます。 了解しました。 基礎がおろそかなようなので、もう少しPHP自体の学習をし直してから取り組むことにします。
m.ts10806

2019/06/10 13:00

はい。Laravelは新進気鋭のフレームワークではありますし、後発なだけあって既存のフレームワークのいいとこ取りだったり不足しているところなどを補ったりして著しい成長を遂げてはいますが、そのぶん、前提となる土台の部分、つまりPHP本体の理解やWeb制作の理解など求められる知識技術が高いです。 ゆえに「Web職人のためのフレームワーク」と公式で謳われています。 だから手を出すなと言うわけではないですが、オブジェクト指向をきちんとおさえることでPHP以外の言語の理解も進めやすくはなるので、まずはそこまでやってみましょう。
Yamachoo

2019/06/10 13:05

ありがとうございます! オブジェクト指向はPHP学習のときになんとなく分かった気になって飛ばしてしまったところも多かったので、もう少ししっかりと学習し直してから、もう一度Laravelに挑戦していきたいと思います。
guest

0

本に書いてあるものを確認したほうが良いですよ。
全体的におかしいので質問にある記述は本には書いてないと思います。

投稿2019/06/10 11:46

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

やるべきことはその本を投げ捨てる。

初心者向けの説明だろうとLaravelでglobal使うことはありえない。
ありえないと分からない初心者がLaravel使うのは無理なのでPHPの基礎から学習が必要。

投稿2019/06/10 11:40

kawax

総合スコア10377

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問