JavaScript勉強会

JavaScriptの学習日記

PHPのエラーメッセージ [] operator not supported for strings

f:id:jsstudy:20181011225836p:plain

 

PHPのエラーの対処方法をメモ。

PHPで配列のデータ追加時に、以下のようなエラーメッセージが出ました。

Message: [] operator not supported for strings

 

これは配列の初期化の扱いが、PHP7.1から変更されていることが原因のようでした。

 

(参考)

kitaney-wordpress.blogspot.com

 

Uncaught Error: [] operator not supported for strings エラー

これは、

$sample[] = $sample_data;

など、配列にデータを追加するに当たって、配列の初期化の型がおかしい場合におきるようですね。PHP 7.0.x まではエラーにはなりませんでした。

 

PHP 7.0.x まで許容

$sample = "";
$sample[] = $sample_data;

 

PHP 7.1.x より

$sample = array();
$sample[] = $sample_data;

 

ということだったのです。

 

d.hatena.ne.jp

 

変数を配列として初期化することで解決する

 

<?php
$post_type = array();
foreach($results as $key => $row) {
    $post_type[] = $row->post_type;
}
?>

 

以前なら、配列の初期化は

$post_type = ''; // string型

と書いても、後で動的に型変換してくれて、配列型のデータも入れられていたはず。

PHP7.1からは型チェックして、ちゃんとはじくようになったんですかね?

 

今後、配列の初期化は、

$post_type = array(); // array型

と書くようにしないとダメ?

 

空の配列を代入しておく以外にも、NULL値で初期化しておいてもOKでした。

$post_type = NULL; // NULL型

NULLは「値を持たないことを表わす特殊型」なので、次に他の値が代入されたときに、その値の型を見て、型が変更されるのでしょうか? 

 

 

以前に書いたコードには、上記の訂正が必要な箇所がたくさん残ってる気がする。

PHPのバージョンを上げるときには気を付けよう。

 

[]の呼び方

「[」と「]」は、角括弧(かくかっこ)と呼びます。

英語では、bracket(ブラケット)と呼びます。

(参考)括弧 - Wikipedia

 

 

PHPの最新の言語仕様は追いかけていないので盲点でした。

検索したら解決方法が見つかったので助かりました!(時間節約!)

情報を共有してくださっている方々、どうもありがとうございます。m(__)m

 

 

スラスラわかるPHP

スラスラわかるPHP