• ベストアンサー

ヒアドキュメントでオブジェクトの呼び出し

こんにちわ。 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; } =============ここまで=================================== ヒアドキュメントの外で先にオブジェクトを実行すればいいのは、わかっていますが、このままできる方法がないのか知りたいです。 どうか、ご教授をお願いします。

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

  • ベストアンサー
  • nick9090
  • ベストアンサー率26% (102/378)
回答No.4

そもそもヒアドキュメント内ではメソッドや関数は使えないと思います。

amountainblast
質問者

お礼

ありがとうございます。 どうにもこの使い方は無理っぽいですね。 何回も親切に回答して頂きありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.5

>printdata内で >function disp_nl2br($Value){  略 >としているのが原因なのでしょうか? 関数内に関数宣言書いたらエラーになります。 エラーになった関数を呼び出しても、オブジェクトの内部関数と認識できないのでそこでエラー表示されてるんでしょう。 たぶん、もう一行ほんとのエラー行を示すエラー表示も出てると思うんだけど。

amountainblast
質問者

お礼

ありがとうございます。 どうにもこの使い方は無理っぽいですね。 何回も親切に回答して頂きありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • nick9090
  • ベストアンサー率26% (102/378)
回答No.3

>Parse error: syntax error, unexpected '(', expecting '}' in 繰り返し言いますが、エラーメッセージを勝手に省略しないでね。 それじゃ答えようがないですよ。 その「in」の後に続く文字列をもう一回よく見てください。 一番最後に、何行目が問題なのか書いてあるでしょう。

amountainblast
質問者

補足

何度もすみません。エラーメッセージは Parse error: syntax error, unexpected '(', expecting '}' in /home/XXX/XXX/html/class_test.php on line 261 となっています。 261行目は <td rowspan="2" class="text_01">{$com_cls->printdata($week)}</td> の部分です。 しかしヒアドキュメントの外で $week = $com_cls->printdata($week) とし、ヒアドキュメントで <td rowspan="2" class="text_01">{$week}</td> としてもエラーはでません。

全文を見る
すると、全ての回答が全文表示されます。
  • nick9090
  • ベストアンサー率26% (102/378)
回答No.2

>syntax error, unexpected エラーメッセージは上記だけではなかったでしょう? 一部だけ抜粋せずに全部掲載しないと。

amountainblast
質問者

補足

ご回答ありがとうございます。 返信が遅くなってすみません。 エラーメッセージは Parse error: syntax error, unexpected '(', expecting '}' in とでます。 printdata内で function printdata($Value){ return (nl2br($Value)); } としているのが原因なのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

ご呈示の記述は、問題なさそうですけど、ほんとにその行でエラーが出ているのですか? 手前の行で最後の ; を忘れた時にも、syntax errorが出ますけど。

amountainblast
質問者

補足

ご回答ありがとうございます。 返信が遅くなってすみません。 エラーはこの行で出ています。 {$com_cls->printdata($week)}を {$week}にすると正常に表示されます。 printdata内で function disp_nl2br($Value){ return (nl2br($Value)); } としているのが原因なのでしょうか? エラーメッセージは Parse error: syntax error, unexpected '(', expecting '}' in とでます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ヒアドキュメントについて

    以前質問しましたが、解決できませんでした。 ヒアドキュメント内での多次元配列の扱いで悩んでいます。 ソースは <?php require_once("mysql.php");// MySQLへのID・パスワードの取得をするファイルへのアクセス function kensaku($str1,$str2,$str3,$str4){ $mysql = new MySQL; $sql = "SELECT * FROM tankanji WHERE kanji like '%$str1%' AND (onyomi like '%$str2%' OR kunyomi like '%$str2%') AND kakusuu like '%$str3%' AND busyu like '%$str4%'"; $row=$mysql->query($sql); echo <<<EOM <TABLE width="3000" frame="border" border="3" cellspacing="1" cellpadding="3"> <TBODY> <TR><TH>id</TH><TH>漢字</TH><TH>音読み</TH><TH>訓読み</TH> <TH>画数</TH><TH>部首</TH></TR> while ($row = $mysql->fetch()){ <TR> <TD align="center"><?={$row['id']}?></TD> <TD align="center"><?={$row['kanji']}?></TD> <TD align="center"><?={$row['onyomi']}?></TD> <TD align="center"><?={$row['kunyomi']}?></TD> <TD align="center"><?={$row['kakusuu']}?></TD> <TD align="center"><?={$row['busyu']}?></TD></TR> } </TBODY> </TABLE> EOM; } なんですが、うまくいきません。 $row=$mysql->query($sql); のあとでprint文で$rowの中身を表示させたらきちんと入っているのでecho <<<EOM以降がおかしいものと思います。 エラーの内容としてはsyntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRINGと表示されてしまいます。これがどうしてもやらないといけないことでしてものすごく困っています。。初心者の質問で大変申し訳ないです。

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

    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
  • VB 解析

    下記のソースコードを取得するまでは出来ましたが,そこから必要なデータを抜き出す方法が分らず 困っています. 抜き出したいのは,時などの文字列と<class="data_0_0">1017.5</td>の間の1017.5などの数値です. どなたかご教示よろしくお願いいたします. <tr class="mtx"><th rowspan="2">時</th><th colspan="2">気圧(hPa)</th><th rowspan="2">降水量<br>(mm)</th><th rowspan="2">気温<br>(℃)</th><th rowspan="2">露点<br>温度<br>(℃)</th><th rowspan="2">蒸気圧<br>(hPa)</th><th rowspan="2">湿度<br>(%)</th><th colspan="2">風向・風速(m/s)</th><th rowspan="2">日照<br>時間<br>(h)</th><th rowspan="2">全天<br>日射量<br>(MJ/m2)</th><th colspan="2">雪(cm)</th><th rowspan="2">天気</th><th rowspan="2">雲量</th><th rowspan="2">視程<br>(km)</th></tr> <tr class="mtx"><th>現地</th><th>海面</th><th>風速</th><th>風向</th><th>降雪</th><th>積雪</th></tr> <tr class="mtx" style="text-align:right;"><td style="white-space:nowrap">1</td><td class="data_0_0">1017.5</td><td class="data_0_0">1020.8</td><td class="data_0_0">--</td><td class="data_0_0">-3.3</td><td class="data_0_0">-5.3</td><td class="data_0_0">4.1</td><td class="data_0_0">86</td><td class="data_0_0">2.1</td><td class="data_0_0" style="text-align:center">北西</td><td class="data_0_0"></td><td class="data_0_0"></td><td class="data_0_0"></td><td class="data_0_0">26</td><td class="data_0_0"></td><td class="data_0_0"></td><td class="data_0_0"></td></tr>

  • ヒアドキュメントについて

    何度も質問してしまっていて大変もうしわけないのですが、今度はヒアドキュメントについてわからなくなってしまいました。 ソースは <html> <head> <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> <input type="hidden" name="ie" value="UTF-8"> <title>7-4 MySQLクラスでのデータの表示</title> </head> <body> <b>入力された条件&nbsp;&nbsp;&nbsp;&nbsp;</b> <?php // 検索条件の表示 print "直接入力:"; print $_POST['chokusetsu']; print "&nbsp;&nbsp;&nbsp;&nbsp;読み:"; print $_POST['yomi']; print "&nbsp;&nbsp;&nbsp;&nbsp;画数:"; print $_POST['kakusuu']; print "&nbsp;&nbsp;&nbsp;&nbsp;部首:"; print $_POST['busyu']; print "&nbsp;&nbsp;&nbsp;&nbsp;の検索結果"; $search_key1 = addslashes($_POST['chokusetsu']); $search_key2 = addslashes($_POST['yomi']); $search_key3 = addslashes($_POST['kakusuu']); $search_key4 = addslashes($_POST['busyu']); //print $search_key1; //$search1にはきちんと値が入っている require_once("mysql.php");// MySQLへのID・パスワードの取得をするファイルへのアクセス function kensaku($str1,$str2,$str3,$str4){ $mysql = new MySQL; $sql = "SELECT * FROM tankanji WHERE kanji like '%$str1%' AND (onyomi like '%$str2%' OR kunyomi like '%$str2%') AND kakusuu like '%$str3%' AND busyu like '%$str4%'"; $row=$mysql->query($sql); echo <<<EOT <TABLE width="3000" frame="border" border="3" cellspacing="1" cellpadding="3"> <TBODY> <TR><TH>id</TH><TH>漢字</TH><TH>音読み</TH><TH>訓読み</TH> <TH>特殊読み</TH><TH>ピンイン</TH><TH>部首</TH><TH>画数</TH> <TH>字源</TH><TH>異体字</TH><TH>繁体字</TH><TH>簡体字</TH> <TH>意味</TH><TH>用例</TH><TH>同訓異字</TH><TH>対義語</TH> <TH>品詞</TH><TH>日本語能力検定級</TH><TH>熟語1</TH> <TH>熟語2</TH><TH>熟語3</TH></TR> while ($row = $mysql->fetch()){ <TR> <TD align="center"><?=$row['id']?></TD> <TD align="center"><?=$row['kanji']?></TD> <TD align="center"><?=$row['onyomi']?></TD> <TD align="center"><?=$row['kunyomi']?></TD> <TD align="center"><?=$row['tokusyu']?></TD> <TD align="center"><?=$row['pinin']?></TD> <TD align="center"><?=$row['busyu']?></TD> <TD align="center"><?=$row['kakusuu']?></TD> <TD align="center"><?=$row['jigen']?></TD> <TD align="center"><?=$row['itaiji']?></TD> <TD align="center"><?=$row['hantaiji']?></TD> <TD align="center"><?=$row['kantaiji']?></TD> <TD align="center"><?=$row['imi']?></TD> <TD align="center"><?=$row['yourei']?></TD> <TD align="center"><?=$row['doukun']?></TD> <TD align="center"><?=$row['taigigo']?></TD> <TD align="center"><?=$row['hinshi']?></TD> <TD align="center"><?=$row['nihongo']?></TD> <TD align="center"><?=$row['jyukugo1']?></TD> <TD align="center"><?=$row['jyukugo2']?></TD> <TD align="center"><?=$row['jyukugo3']?></TD></TR> } </TBODY> </TABLE> EOT; } kensaku($search_key1,$search_key2,$search_key3,$search_key4); ?> </body> </html> です。エラーとしてはsyntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRINGが表示されます。エラーの原因がよくわからず、困っています。何か、お気づきの点があれば意見が欲しいです。お願いします。

    • ベストアンサー
    • PHP
  • FireFoxでborder-collapseを使うと余計な枠線が表示される

    FireFoxでborder-collapse:collapseを指定すると、余分な枠線が表示されてしまいます。 IEでは問題ありません。 <HTML> <HEAD> <title>TEST</title> <style type="text/css"> table { border-collapse: collapse; } td { border: 1px solid black; } td.none{border:none;} </style> </HEAD> <BODY> <table> <tbody> <tr><td rowspan="2">test</td><td class=none>&nbsp;</td><td rowspan="2">text</td><td class=none>&nbsp;</td></tr> <tr><td class=none>text</td><td td class=none>&nbsp;</td></tr> <tr><td rowspan="2">test</td><td class=none>&nbsp;</td><td rowspan="2">text</td><td class=none>&nbsp;</td></tr> <tr><td class=none>text</td><td td class=none>&nbsp;</td></tr> <tr><td class=none>&nbsp;</td><td td class=none>&nbsp;</td><td class=none>&nbsp;</td><td class=none>&nbsp;</td></tr></tbody> </table> </BODY> </HTML> 何か対策は無いでしょうか?

  • jQueryで合計を出したい

    <table> <tr> <td class="point"><input type="text"></td> <td class="point"><input type="text"></td> <td class="point"><input type="text"></td> <td class="point"><input type="text"></td> </tr> </table> とHTMLで記述していて、jQueryを下記のように記述しました。 var total; j$(".point:text").change(function(){ j$(".point:text").each(function(){ var point = j$(this).val(); total = parseInt(point)+total; }); alert(total); }); alertで返ってくる結果が「NaN」となります。 どのようにすれば合計値が求められるでしょうか。 やりたいことは「pointクラス」内のテキストフォームの値を合計したいです。

  • 2つのクラスファイルの使用方法

    こんにちわ。PHP4.3 PHP5でのクラスについての質問です。 A.cls SQL関連のクラス(検索や登録に使用) B.cls LOG関連のクラス(SQLエラーやページ遷移時に使用) C.php 処理のページ と3つのファイルを作りました。 C.phpでA.clsとb.clsをrequireしてnewで各オブジェクト(A_obj B_obj)を作成します。 A.cls内でDB接続が失敗したり、SQLエラーがあった時に B.clsのメソッドを使用してログを書き出そうとしています。 今はA.cls内の各メソッドでB_objをglobeで呼び出すか引数で渡すかしています。 ここから質問なのですが、 c.phpで作成したB.clsのオブジェクトをA.cls内で使用しようと思えば A.clsの各メソッドでglobeするか引数で渡すかしか方法がないのでしょうか? 各clsファイルの機能がぜんぜん違うので継承は考えていません。 あいまいな質問で申し訳ないのですが、globe、引数以外で方法がありましたら、ご教授お願いします。 PHPのバージョンは4のみOKや5のみOKなどでもかまいません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • foreachの表示に追加するには

    http://okwave.jp/qa2460708.html と同じようなテーブル構造で、同じようなhtmlへの書き出しを行っています。 No.1さんの回答の下記のスクリプトを参考にし、うまく表示することができました。 $sql="SELECT `ID`,`SHOPNAME` FROM `SHOP`"; $res = mysql_query($sql,$link); while ($rows = mysql_fetch_assoc($res)) { $SHOP[$rows["ID"]]=$rows["SHOPNAME"]; } $sql="SELECT `ID`,`ITEMNAME` FROM `ITEM`"; $res = mysql_query($sql,$link); while ($rows = mysql_fetch_assoc($res)) { $ITEM[$rows["ID"]]=$rows["ITEMNAME"]; } foreach($SHOP as $key1=>$val1){ foreach($ITEM as $key2=>$val2){ $LINK[$key1][$key2]="&nbsp;"; } } $sql="SELECT `SHOP`,`ITEM` FROM `LINK`"; $res = mysql_query($sql,$link); while ($rows = mysql_fetch_assoc($res)) { $LINK[$rows["SHOP"]][$rows["ITEM"]]="○"; } print<<<eof <table border> <thead> <tr> <th>&nbsp;</th> eof; foreach($ITEM as $key2=>$val2){ print "<th>$val2</th>"; } print<<<eof </tr> </thead> <tbody> eof; foreach($SHOP as $key1=>$val1){ print "<tr>"; print "<td>$val1</td>"; foreach($ITEM as $key2=>$val2){ print "<td>{$LINK[$key1][$key2]}</td>"; } print "</tr>"; } print<<<eof </tbody> </table> eof; しかし、下記のテーブルに項目が1つ追加され、それも表示できるようにして欲しいと依頼されました。 Table:SHOP ID  SHOPNAME STATION ------------------------ 1   東京 | 表参道 2   大阪 | 梅田 3   福岡 | 天神 (略) 結果としては下記のように表示したいです。 NAME |STATION|化粧品|家具 |園芸 |食品 |家電 | ------------------------------------------------ 東京 | 表参道|   |   |   | ○ |   | 大阪 | 梅田 |   |   |   |   | ○ | 福岡 | 天神 | ○ | ○ |   |   |   | (略) 配列をよく理解できていないため、スクリプトをそのまま真似して $STATION[$rows["ID"]]=$rows["STATION"]; を作ったり $SHOP[$rows["ID"]][$rows["STATION"]]=$rows["SHOPNAME"]; を作ったりして無理矢理展開してみようとしましたが やはり表がぐちゃぐちゃになってしまいます。 どうすればうまく表示できるか、アドバイス頂けませんでしょうか。

    • ベストアンサー
    • PHP
  • tableにtable。table同士の間隔を拡大

    スクロールバーを付けるためにtable内にtableを入れました。 中のtableとtableの間隔を開けたいです。 言葉が少ないですが、その分画像で頑張って説明します。 お願いいたします。 <style type="text/css"> #test0{ cellpadding: 2; width: 518px; background-color : #fff; border:1px solid #333; border-spacing:0; } #start{ width: 495px; height: 230; border-top:1px solid #333; border-left:1px solid #333; border-right:1px solid #333; border-bottom:1px solid #ff0000; } .center{ width: 495px; height: 230; border-top: 0; border-left:1px solid #333; border-right:1px solid #333; border-bottom:1px solid #ff0000; } #end{ width: 495px; height: 230; border-top: 0; border-left:1px solid #333; border-right:1px solid #333; border-bottom:1px solid #40ee22; } td.test1{ background-color: #000000; color: #333333; } td.test2 img{ margin: 10px; } .test3{ font-size: 12px; padding: 5px; } td.test4{ text-align: center; } </style> <table id="test0"> <tbody> <tr> <td> <DIV style="height:400px; overflow:auto;"> <table id="start"> <tr> <td class="test1" colspan="3">タイトル</td> </tr> <tr> <td class="test2" rowspan="2"><img src="test.jpg" width="100" height="80"></td> <td class="test3" colspan="2">テストテストテストテストテストテスト</td> </tr> <tr> <td class="test4">left</td> <td class="test4">right</td> </tr> </table> <table class="center"> <tr> <td class="test1" colspan="3">タイトル</td> </tr> <tr> <td class="test2" rowspan="2"><img src="test.jpg" width="100" height="80"></td> <td class="test3" colspan="2">テストテストテストテストテストテスト</td> </tr> <tr> <td class="test4">left</td> <td class="test4">right</td> </tr> </table> <table id="end"> <tr> <td class="test1" colspan="3">タイトル</td> </tr> <tr> <td class="test2" rowspan="2"><img src="test.jpg" width="100" height="80"></td> <td class="test3" colspan="2">テストテストテストテストテストテスト</td> </tr> <tr> <td class="test4">left</td> <td class="test4">right</td> </tr> </table> </div> </td> </tr> </tbody> </table>

    • ベストアンサー
    • HTML
  • 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」と表示されるのですが…

    以下のコードを事項すると、「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」と表示されて 「objIE.Document.all.ALT_L_NAME.Value = t」の部分が黄色くなります。 解決策をお願いいたします。 (以下、コードとソースの一部です) コード↓ Sub a() Dim objIE As InternetExplorer '参照設定:Microsoft Shell Controls and Automation Dim objShell As Shell Dim WinFlg As Boolean Dim objWin As Object Dim AllLog As Object On Error GoTo EndProcess Set objShell = New Shell For Each objWin In objShell.Windows If TypeName(objWin) = "IWebBrowser2" Then WinFlg = True Set objIE = objWin Exit For End If Next Set objShell = Nothing If WinFlg = False Then MsgBox "IEオブジェクトが取得できません", vbCritical Exit Sub End If EndProcess: If Err() > 0 Then MsgBox Err.Description End If t = Cells(1, 1) objIE.Document.all.ALT_L_NAME.Value = t Set objIE = Nothing End Sub ソース(一部)↓ ・ ・ ・ <SELECT NAME="PRIVILEGE_CODE" onChange=click01()><OPTION VALUE=2>タクナフ </SELECT> </td> </tr> <tr> <td bgcolor="#FFFF93" width="150"> <font color="#660000"> <b>タォ・ユ・・ャ・ハ(チエウム・ォ・ハ)</b></font> </td> <td width="390"> <INPUT TYPE="text" NAME="L_NAME" SIZE="40" MAXLENGTH="16"> </td> </tr> <tr> <td bgcolor="#FFFF93" width="150"> <font color="#660000"> <b>フセ・ユ・・ャ・ハ(チエウム・ォ・ハ)</b></font> </td> <td width="390"> <INPUT TYPE="text" NAME="F_NAME" SIZE="40" MAXLENGTH="16"> </td> </tr> <tr> <td bgcolor="#FFFF93" width="150"> <font color="#660000"> <b>タォ(エチサ・</b></font> </td> <td width="390"> <INPUT TYPE="text" NAME="ALT_L_NAME" SIZE="40" MAXLENGTH="16"> </td> </tr> <tr> <td bgcolor="#FFFF93" width="150"> <font color="#660000"> <b>フセ(エチサ・</b></font> </td> <td width="390"> <INPUT TYPE="text" NAME="ALT_F_NAME" SIZE="40" MAXLENGTH="16"> </td> </tr> ・ ・ ・