• ベストアンサー

クラス内での二次元配列への値の代入について

以下のソースで、配列変数$a[0][0]にbを代入して、メソッドprintAでそれをprintしようとしていますが、"Parse error: syntax error, unexpected '$a' (T_VARIABLE), expecting function (T_FUNCTION) in C:\xampp\htdocs\a.php on line 4"というエラーが出ます。 どうすれば、$a[0][0]にbを代入して、メソッドprintAでそれをprintできるか教えてください。 phpのバージョンは5.5.15です。 <?php class A{ private $a = array(); $a[0][0] = 'b'; function printA(){ print $this->a[0][0]; } } $x = new A(); echo $x->printA(); ?>

  • h_mp
  • お礼率97% (67/69)
  • PHP
  • 回答数3
  • ありがとう数6

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

  • ベストアンサー
noname#244856
noname#244856
回答No.1

>> $a[0][0] = 'b'; こういう静的ではない文はメソッドの中以外に書けません。あと、メソッドの中でprintして外側でもechoしているところが謎です。あと終了タグも要りません。以下のように書きましょう。 <?php class A{ private $a = array(array('b')); function printA(){ print $this->a[0][0]; } } $x = new A; $x->printA(); ちなみにPHP5.4以降で書くんだったらこうしますね。 <?php class A{ private $a = [['b']]; function printA(){ print $this->a[0][0]; } } (new A)->printA();

h_mp
質問者

お礼

補足のご回答ありがとうございました。

h_mp
質問者

補足

静的ではない文はメソッドの中以外書けないんですね。echoと終了タグが必要ない件も承知しました。ありがとうございます。 追加でご質問なのですが、静的でない文というのは、具体的にどういうものでしょうか。 よろしくお願いします。

その他の回答 (2)

noname#244856
noname#244856
回答No.3

以下のものは必ず右辺は静的な値でなければなりません。 ・クラスプロパティ宣言 (private, protected, public, var キーワード) ・クラス定数宣言 (constキーワード) ・定数宣言 (constキーワードを使う場合のみ、define関数による定義は除く) ・静的変数宣言 (staticキーワード) 静的な値の例を述べます。 ・null ・true ・1 ・'hoge' ・array() ・array(3 => 'hoge', 'five' => array('fuga')) 以下のような特徴があると思われます。 ・変数展開を使ってはいけない ・演算子を使ってはいけない ・関数を使ってはいけない (arrayキーワードは関数ではないので大丈夫) ・クラスのインスタンスを生成してはいけない ただ、PHP5.6からはこの制限が少し緩和されるようです。 http://php.net/manual/ja/migration56.new-features.php#migration56.new-features.const-scalar-exprs

h_mp
質問者

お礼

なるほど。静的でない文とはそういうもので、クラスプロパティ宣言ではそういった文以外書けないんですね。勉強になります。大変詳しくありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

流れ的にはセットする関数を実行してからプリントするか <?php class A{ private $a = array(); function setA(){ $this->a[0][0] = 'b'; } function printA(){ print $this->a[0][0]; } } $x = new A(); $x->setA(); echo $x->printA(); ?> めんどうならコンストラクタで処理してみては? (汎用性が落ちるので微妙ですが・・・) <?php class A{ private $a = array(); function __construct(){ $this->setA(); } function setA(){ $this->a[0][0] = 'b'; } function printA(){ print $this->a[0][0]; } } $x = new A(); echo $x->printA(); ?>

h_mp
質問者

お礼

なるほど!メソッドで処理すればOKなんですね! 勉強になりました。ありがとうございます!

関連するQ&A

  • クラス内の変数にメソッドからアクセスできない。

    以下のphpのソースで、メソッドcから、クラス内の変数bの値を参照しようとすると"Notice: Undefined variable: b in C:\xampp\htdocs\a.php on line 5"というエラーが出るのですが、どのようにすれば参照できるのか教えてください。 phpのバージョンは5.5.15です。 <?php class A{ private $b = 0; public function c(){ print $b; } } $x = new A; $x->c(); ?>

  • PHPのエラーについて質問です

    PHPのエラーについて質問です XAMPPをインストールして、 http://localhost/top.php のように、フォルダの中身のファイル名を指定すると、 以前までは、ちゃんと表示されていたものが、 Parse error: syntax error, unexpected $end, expecting T_VARIABLE or T_END_HEREDOC or T_DOLLAR_OPEN_CURLY_BRACES or T_CURLY_OPEN in C:\xampp\htdocs\top.php on line 68 のようにエラーが表示されるようになりました。 解決策を教えてもらえないでしょうか?

    • ベストアンサー
    • 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
  • 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のプログラム結果が正しく表示されません

    すいません。現在PHPの勉強をしているのですが、下記のサイトにある通りにプログラムを 作っても Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\xampp\htdocs\test.php on line 6 とエラーが出ます。どうしてでしょうか?他のプログラムは正しく表示されるのですが・・。 http://php.xenophy.com/variable-array/index.html 「配列に値を代入する」から下の全てのプログラムが全てエラーと出ます。 例 <?php $animal[] = "牛"; $animal[] = "馬"; $animal[] = "鹿"; echo "$animal[ 0 ]<br />¥n"; echo "$animal[ 1 ]<br />¥n"; echo "$animal[ 2 ]<br />¥n"; ?> 参考にしているwebページ自体が間違っているのでしょうか?詳しい方アドバイスお願いします。

    • 締切済み
    • PHP
  • エラーの意味!

    初めて見るエラーで困ってます!! どなたか教えてください! Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in /***/***/***/test.php on line 331

    • ベストアンサー
    • PHP
  • Parse errorについて質問です

    オーサカPHPさんのw3Analyzerと言うアクセス解析を使ってみようと思い 設置してログを見ようとすると、 Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /××××/w3a/w3a.php on line 82 と出るのですが、これはw3a.phpの82行目がおかしいとでているのでしょうか? w3a.phpは一切なにも変更はしていないのですが・・・ PHP4の環境向けに作られていると書いてあり、自分のサーバーのPHPのバージョンを見てみるとPHP 4.4.8と書いてありました。 これはPHP4と言うことでいいのでしょうか?

    • ベストアンサー
    • PHP
  • ブログが見れません。

    暇つぶし感覚でブログを覗いていたのですが、 エラーのようなものがでてしまいました。 Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /virtual/talentblog/public_html/tllink/tllink.php on line 106 なぜですかね? ご指導下さい。

  • const 宣言ができない。

    バージョンは PHP 5.0.4 です。 5.0以降、constを使ってクラス内で定数を宣言できるようなのですが、 使うと Parse error: parse error, unexpected T_VARIABLE in ... とエラーが出てしまいます。 サポートしていないんでしょうか? 参考 http://phpspot.net/php/pg%83N%83%89%83X%93%E0%82%C5%82%CC%92%E8%90%94.html

    • ベストアンサー
    • PHP
  • PHPでエラーがでてしまって困っています。

    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /Applications/MAMP/htdocs/5-2-1.php on line 30 このエラーを解消できません。 下記は実践マスターPHP+MYSQLという書籍のなかのサンプルなんですが、どこが間違っているかどなたか教えていただけないでしょうか? エラーを検索するとダブルクォーテーションの使い方が原因と書いてあるんですが、最近PHPを勉強したばかりでどうやっても解決できません。 function check_3(&$str){ $str =str_replace($GLOBALS["from"],$GLOBALS["to"],$str);  ←この行でエラー global $msg; $msg = $GLOBALS["from"].'から'.$GLOBALS["to"].'へ置換しました!<br>'; return strlen($str); } 宜しくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう