• ベストアンサー

ヒアドキュメントとクラスの基本的?な質問です

PHPのヒアドキュメントを使ってHTMLのクラスを使ろうと思っているのですがいきなりわからなくなってしまいました。下のソースのどこがいけないのでしょうか。 エラー内容は Parse error: parse error, unexpected $end in \Html.php on line 19 です。よろしくお願いします。 index.php <?php require_once("./Html.php"); $html = new Html(); print $html->NoFrame(); ?> Html.php <?php class Html{ function Html(){ } function NoFrame(){ $html = <<<EOF <html> <head> <title> </title> </head> <body> おーい </body> </html> EOF; return $html; } } ?>

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • taskuni
  • ベストアンサー率71% (49/69)
回答No.1

ヒアドキュメントの終端IDの行にタブが入っていませんか? 参考URLからの引用です。 >非常に重要なことですが、終端IDがある行には、セミコロン (;)以外の他の文字が含まれていてはならないこ とに注意してください。これは、特にIDはインデントしてはならないと いうことと、セミコロンの前に空白やタブを付けてはいけないことを 意味します。

参考URL:
http://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.heredoc
bolder
質問者

お礼

回答ありがとうございます。タブが入っていました・・・。 まさかこんな原因だと思っていなかったのでマニュアルは見ていませんでした。今後はマニュアルを確認してから質問しようと思います。 ありがとうございました。

関連するQ&A

  • <<< のエラーメッセージ解消について

    <<<(ヒアドキュメント)を使うと、文章最下部のようなエラーメッセージが出てしまいます。 このメッセージを解消し、また、<<<を正しく作動させるにはどうすればよろしいでしょうか。 お知恵をお貸し頂ければ幸いです。 ちなみに下記がスクリプトです。 ■スクリプト <?php //関数ファイルを読み込む require_once("function.php"); // HTMLを出力する(書き込み部分 print <<<EOF <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>掲示板書き込み完了</title> </head> <body> <h1>掲示板書き込み完了</h1> <dl class="message"> <dt class="msg-label"></dt> <dd class="msg-name">書き込みが完了しました。</dd> </dl> <br> <a href="form.php">書き込みフォームへ戻る</a> </form> </body> </html> EOF; ?> ■エラーメッセージ Parse error: syntax error, unexpected T_SL in C:\xampp\ 上記エラーメッセージを解消し、また、<<<を正常に作動させるにはどうすればよろしいでしょうか? お忙しいと存じますが、お知恵をお貸しいただければ幸いです。

    • ベストアンサー
    • PHP
  • PERLでのヒアドキュメントの呼び出し

    以下のようなCGIの改造を行いたいのですが、 sub abc{ ・ ここ1  ・ $check1=<<"EOF"; <HTML><HEAD><TITLE>test</TITLE></HEAD><BODY>  ・ <img src="$directryname[0]" width = "80">  ・ </BODY></HTML> EOF ここ2 print $check1; exit; ここ1、もしくはここ2のところに $directryname[0] = "http://abc/aa/a.jpg"; を入れてもsub abc内のimgタグで..jpgが表示されません。 ヒアドキュメントでぐぐって見ましたが、適切な回答が得られませんでした。よろしくお願いします。

    • ベストアンサー
    • Perl
  • PHPでクラス内のpublicでエラーになる原因

    Apache/1.3.27を使っています。 下記コードをローカルで表示すると Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in c:\phpdev\www\ajax\sql.php on line 11 というエラーが出てしまいます。 なぜエラーになるのか原因が分かりません。 アドバイスを頂けないでしょうか。 <html> <head><title>PHP TEST</title></head> <body> <?php $tv = new Television(); $tv->$channelNo = 8; $tv->dispChannel(); class Television{ public $channelNo; function dispChannel(){ print('現在のチャンネルは'.$this->channelNo); } } ?> </body> </html>

    • ベストアンサー
    • PHP
  • ヒアドキュメントができない。

    PHP初心者です。 Mac OS X 10.4.10で、MAMPという、WindowsでいうところのXAMPP のような環境でPHPを使っているのですが、ヒアドキュメント print<<<nantoka nantoka; とかができません。やると、画面が真っ白になります。 Terminalでやってみると、print<<<nantokaの行でParse errorが出ています。 Windowsだと確かそんなことはなかったはずなのに・・・。 なぜでしょうか?

    • ベストアンサー
    • PHP
  • 連想配列を含むヒアドキュメントの書き方

    連想配列を含むヒアドキュメントの書き方を教えてください。 以下のコードならうまく行きました。 -(1)-------------------------- $SS = $_SERVER['PHP_SELF']; $html_txt = <<<EOT ($SS) EOT; echo $html_txt; ------------------------------ これを一時的な変数を使わずに以下のようなコードで実行したいです。 -(2)-------------------------- $html_txt = <<<EOT ($_SERVER['PHP_SELF']) EOT; echo $html_txt; ------------------------------ これを実行すると # Parse error: syntax error, unexpected '"', # expecting T_STRING or T_VARIABLE or T_NUM_STRING in … というエラーが出てしまいます。 最悪、(1)でもいいと思っています。しかし(2)のようなケースでもできてもいいのではないかと思うのですが、エスケープを入れたり「$_SERVER["PHP_SELF"]」などとクォーテーションを変更したりしてもうまく行きません。 質問は以下です ・(2)のような記述はPHPでは不可能なのでしょうか? ・もし可能なら(1)の何が悪いのか、どうすればうまく行くのかを教えてください よろしくお願いします。

    • ベストアンサー
    • PHP
  • ヒアドキュメントを中断してincludeする方法とは?

    ホットペッパーAPIを使ってサイトを作っています。まだ知識が浅く分からないことが多いのですが、下記について教えて下さい。 <?php //サイト設定 $site['title'] = "APIサンプルサイト"; $site['url'] = "http://●●.jp"; $site['mojicode'] = "Shift_JIS"; $site['info'] = "ホットペッパービューティーAPIのサンプルです"; //XMLデータ取得用ベースURL $req = "​http://webservice.recruit.co.jp/beauty/salon/v1/";​ //リクエストパラメータ設定 $name = "◎◎"; $name_kana = "××"; //XMLデータ取得用リクエストURL生成 $req .= "?name=".$name."&name_kana=".$name_kana; $xml = simplexml_load_file($req) or die("XMLパースエラー"); //HTML出力 echo <<<HTML <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>{$site['title']}</title> </head> <body> <h1>{$site['title']}</h1> <hr> {$site['info']} <hr> {$xml->salon->name}<br> {$xml->salon->name_kana}<br> </body> </html> HTML; ?> ------------------------------------ (APIキーを省略しています) 上記の様に作成したページに <?php include_once '../include/commons.php'; ?> を入れて別のphpファイルを参照したいのですが、別の質問で 「表示したい位置でヒアドキュメントを中断して、そこでinclude 」 と教えて頂きました。Googleでいろいろと検索して調べたのですが、ヒアドキュメントを中断してincludeする方法が分かりません。 知識不足なのは承知ですが、どういうキーワードで調べたらいいかもよく分からない状況でして・・。 具体的にどう作業すればいいか教えて頂けないでしょうか。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • ヒアドキュメントでオブジェクトの呼び出し

    こんにちわ。 PHP Version 4.4.9で勉強をしているのですが、 ヒアドキュメント内で作成したオブジェクトを呼び出すと syntax error, unexpected とエラーになります。 調べてみらるとヒアドキュメント内でメンバ変数を呼び出すことはできるみたいなのですが、オブジェクトを呼び出すことはできないのですか? SQLで取得したデータを表で表示しようとしています。 =============ソース==================================== $com_cls = new com_cls(); //dateフォーマットの変更クラス foreach($sql_hyo_arr as $key => $val){ $sql_hyo .= <<<EOF <tr> <td rowspan="2" class="text_01">{$com_cls->printdata($val['month'])}</td> <td rowspan="2" class="text_01">{$com_cls->printdata($val['day'])}</td> <td rowspan="2" class="text_01">{$com_cls->printdata($week)}</td> EOF; } =============ここまで=================================== ヒアドキュメントの外で先にオブジェクトを実行すればいいのは、わかっていますが、このままできる方法がないのか知りたいです。 どうか、ご教授をお願いします。

    • ベストアンサー
    • PHP
  • require_once の結果について

    linux上でphp Ver5.5.28を使っています。 まず、index.phpは <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>テスト・タイトル</title> </head> <body> <h1>require_onceのテストを行います。</h1> <p><?php require_once("test.php"); ?></p> </body> </html> と記入しています。 test.phpは <?php $aaa = "変数に文字を設定します。"; print $aaa; ?> と記入しています。 実行した結果のHTMLを見ると添付ファイルのとおり不明なコードが追加されています。 また、test.phpを <?php ?> のみでやっても不明なコードが作成されてしまいます。 どなたか、原因が分かる方がいらっしゃれば教えていただけないでしょうか。 よろしくお願いします。 その結果のHTMLを見ると、添付画像のとおりゴミが出力されています。

    • ベストアンサー
    • PHP
  • リモートファイルのrequireに関して

    はじめまして、 PHPのマニュアルには 「php.iniでallow_url_fopenを有効にした場合、 パラメータとしてファイル名をとる関数の多くでHTTPおよびFTPのURL を使用することができます。加えて、include(), include_once(), require(), require_once() 命令でURLを使用することができます。」 とあるのですが、requireでリモートファイルを読みこめません PHP のバージョンは 4.1.2 php.iniでallow_url_fopenが有効(On)になっているのは確認しました。 http://www.****1.com/hoge1.php から http://www.****2.com/hoge2.php を呼び出しています。 hoge1.php及びhoge2.phpのソースは以下のとおりです。 ----hoge1.php-------------------------------------------------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML lang="ja"> <HEAD> <META http-equiv="content-type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITILE></TITILE> </HEAD> <BODY> <?php require ("http://www.****2.com/hoge2.php"); dispword(); ?> </BODY> </HTML> --------------------------------------------------------------------- ----hoge2.php-------------------------------------------------------- <?php function dispword(){ print xyz; } ?> --------------------------------------------------------------------- 実行結果は Fatal error: Call to undefined function: dispword() in ・・略・・****1.php on line 11 となります。 10行目じゃなく11行目にでてるということは、requireできてるんでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ZendFrameworkでParseError

    レンタルサーバへZendFrameworkのライブラリを設置したところ、以下のエラーが出ます。 Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/****/*****/ZendFramework/library/Zend/Controller/Front.php on line 44 index.phpでFront.phpをrequire_onceしているので、index.phpもZendFrameworkライブラリも設定は間違っていないのではないかと思われます。 ライブラリのデータ破損などがあることも考え、若干バージョンの違うものをアップロードしてみましたが同じでした。 自分の作成したファイルでエラーが出ているのであれば問題点の探しようもあるのですが、フレームワークのライブラリなので、どう対処していいかが分かりません。 分かる方がいらしたらぜひ教えてください。

    • ベストアンサー
    • PHP

専門家に質問してみよう