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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

508閲覧

Parse error について

GoGobuchiking

総合スコア33

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/03/21 12:25

下記のコードを実行したところ、以下のエラーが出ました。
Parse error: syntax error, unexpected 'if' (T_IF), expecting function (T_FUNCTION) in /home/vagrant/cal_php/Cal.php on line 11

require_once(DIR . '/Cal.php');で呼び足したいのですが。。。
if ($_SERVER['REQUEST_METHOD'] === 'POST'){が原因みたいなのですが、どこに問題がありますでしょうか?

php

1<?php 2 3namespace MyApp; 4 5class Cal { 6 7 public $text1 =''; 8 public $text2=''; 9 public $result=''; 10 11 if ($_SERVER['REQUEST_METHOD'] === 'POST'){ 12 $text1 = $_POST['text1']; 13 $text2 = $_POST['text2']; 14 $selected = $_POST['answer']; 15 } 16 switch ($selected){ 17 case "plus"; 18 $result = $text1 + $text2; 19 break; 20 case "mainasu"; 21 $result = $text1 - $text2; 22 break; 23 case "kakeru"; 24 $result = $text1 * $text2; 25 break; 26 case "waru"; 27 $result = $text1 / $text2; 28 break; 29 } 30} 31 ?> 32

html

1<?php 2 3require_once(__DIR__ . '/config.php'); 4require_once(__DIR__ . '/Cal.php'); 5 6$cal = new \MyApp\Cal(); 7 8 ?> 9 10<!DOCTYPE html> 11<html lang = "ja"> 12<head> 13 <meta charset = "utf-8"> 14 <title>calculator</title> 15 <link rel="stylesheet" href="styles.css"> 16</head> 17<body> 18<div id ="container"> 19 <h1>Calculation</h1> 20 <form action="" method="POST"> 21 <div id="container-1"> 22 <input type="text" id="text1" name="text1" tabindex = "1" placeholder="数値1" value="<?= h($text1); ?>" onKeyup="this.value=this.value.replace(/[^0-9]+/,'')"> 23 <ul> 24 <li tabindex = "2" data-id="plus" class="btn">+</li> 25 <li tabindex = "3" data-id="mainasu" class="btn"></li> 26 <li tabindex = "4" data-id="kakeru" class="btn">×</li> 27 <li tabindex = "5" data-id="waru" class="btn">÷</li> 28 <input type="hidden" id="answer" name="answer" value=""> 29 </ul> 30 <input type="text" id="text2" name="text2" tabindex = "6" placeholder="数値2" value="<?= h($text2); ?>" onKeyup="this.value=this.value.replace(/[^0-9]+/,'')"> 31 <button type="button" id="result" tabindex = "7">=</button> 32 <div id="cal_result" ><?= h($result); ?></div> 33 <div id="clear" tabindex = "0">Clear</div> 34 </div> 35 </form> 36</div> 37<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 38<script> 39$(function(){ 40 'use strict'; 41 var $selected = ''; 42 $('.btn').on('click keypress', function(e){ 43 $('.btn').removeClass('selected'); 44 $(this).addClass('selected'); 45 $selected = $('#answer').val($(this).data('id')); 46}); 47 48 $('#result').on('click', function(){ 49 if ($('#text1').val() === '' || $('#text2').val() === '' || $selected === ''){ 50 alert('Choose One!'); 51 } else { 52 $('form').submit(); //POST形式で送られる 53 } 54 }); 55 $('#clear').on('click keypress', function(e){ 56 location.reload(); 57 }); 58}); 59</script> 60</body> 61</html> 62

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

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

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

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

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

guest

回答2

0

IDE使えば今回のようなエラーは実行前に分かります。
(下記はEclipse)

イメージ説明

エラーだけではわかりにくいですが、今回の原因はもっとクラスの基本部分。

Classを利用する場合はfunctionの中以外に実行コード書いたらダメです。

クラスの基礎
 を確認してください。

投稿2019/03/21 12:33

m.ts10806

総合スコア80850

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

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

GoGobuchiking

2019/03/21 13:36

ありがとうございます。 functionの中にコードを書いてエラーは解除されたのですが、今度は表示画面に Notice: Undefined variable: result in /home/vagrant/cal_php/index.php on line 34 というエラーが出てしまいました。変数の定義がうまくいっていないのかなと思っています。色々試してみて出来ない場合はまた、質問させて頂きます。
m.ts10806

2019/03/21 13:39

まあ、定義されたのがClassのプロパティとしてなら生成したクラスのインスタンスからそのプロパティを呼び出すかメソッドからreturnして受け取らないといけませんし、その前にプロパティで定義された変数に対する変更ができる書き方になってません。 私やkei344さんが提示したPHPマニュアルの「クラスの基礎」の関連ページ一式を一通り読まれて実装に反映されたほうが良いでしょう。
GoGobuchiking

2019/03/21 13:53

メソッドからreturnして受け取らないといけませんし → switch 構文の最後にreturn $resultつけたのですがダメでした。 その前にプロパティで定義された変数に対する変更ができる書き方になってません →publicのことですか?
m.ts10806

2019/03/21 13:56

「クラスの基礎」のページは確認されたのでしょうか。 例1でいきなりプロパティへのアクセスについて触れられていますよ。 小手先だけでなんとかしようとするのではなく、PHPマニュアル読んできちんと理解してからもっと簡単なコードで試してから自身のコードに反映するようにしてください。
GoGobuchiking

2019/03/21 14:50

きちんと理解できません。 一旦、ここで終了します。
m.ts10806

2019/03/21 14:52

全部一気にやろうとしなくていいですよ。パンクするだけです。 PHPマニュアルにあるサンプルコードを1個ずつ実行して動作を確かめていってください。
m.ts10806

2019/03/22 03:57 編集

了解です。PHPマニュアル確認して理解と検証が進めればおそらく質問する前に自己解決できる内容ですので、がんばってください。
GoGobuchiking

2019/03/25 05:51

解決できました。 $thisでアクセスしていなかったことが原因でした。 アドバイスありがとうございます。
m.ts10806

2019/03/25 05:56

はい。その通りです。 本当はアクセス修飾子とか気にした方がいいのですが、そこはまた次の段階で。 要件によって適切にデータの持ち方、返し方を使い分けられるように考えてやってみてください(PHPマニュアル確認は必須です)
guest

0

ベストアンサー

どこに問題がありますでしょうか?

クラスの作り方に問題があります。

【PHP: クラスの基礎 - Manual】
http://php.net/manual/ja/language.oop5.basic.php

投稿2019/03/21 12:30

kei344

総合スコア69407

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問