以下のソースで、配列変数$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();
?>
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-feature …
なるほど。静的でない文とはそういうもので、クラスプロパティ宣言ではそういった文以外書けないんですね。勉強になります。大変詳しくありがとうございます。
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();
?>
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();
この回答への補足
静的ではない文はメソッドの中以外書けないんですね。echoと終了タグが必要ない件も承知しました。ありがとうございます。
追加でご質問なのですが、静的でない文というのは、具体的にどういうものでしょうか。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- PHP php エラー 2 2022/10/23 16:43
- その他(プログラミング・Web制作) cryptcatのビルド 4 2022/07/21 14:55
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- JavaScript javascriptで変数を組み込みたい 2 2023/01/13 09:52
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
日付、時間の2段階でソート
-
codeigniterのページネーション...
-
スカラーのベクトル微分
-
配列をループでたくさん宣言し...
-
String だと「 ByRef引数の型が...
-
ログファイルの古い日付の行を...
-
pythonのファイルの並びでの読...
-
file_existsでファイル名の部分...
-
foreachで上限回数指定方法また...
-
pg_copy_fromの使い方について...
-
foreachのなかで次のキーを参照...
-
【PHP】配列のキー名の修正は可...
-
CakePHPのfindの取得件数は?
-
curlをPHPで書く方法
-
ネストが深い時のforeachはどう...
-
配列のランク付け
-
3つの連想配列を交互に代入し...
-
verilogで、配列の一部をタスク...
-
smartyの配列について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
phpとmysqlで「あいまい検索」...
-
listへのappendが出来ない件
-
「ローマ字 -> ひらがな」へPHP...
-
PHP5の外部コマンド実行で、バ...
-
Zend_Form_Element_Hash
-
codeigniterのページネーション...
-
usortで3つの項目を昇順・降順...
-
cakephp2.6でfindを使い合計値...
-
PHPのpreg_split第3引数で、区...
-
NGワード設定もしくはテキス...
-
しりとり 無限ループ?
-
バッチでFTPコマンド
-
PHP配列をJavaScriptに渡したい
-
phpでのソートについて
-
多次元配列等の AND 検索について
-
file_get_contentsなどでrefere...
-
日付、時間の2段階でソート
-
MySQL→PHP→JSONをしたい...
-
2次元配列の値の受け渡しについ...
おすすめ情報