1. ホーム
  2. php

[解決済み] このIllegal String Offsetを修正するにはどうすればよいですか?

2022-02-15 10:44:46

質問事項

このエラーが表示されます "警告。/home/mysite/public_html/wp-content/themes/evento/lib/php/extra.class.php on line 32" にある不正な文字列オフセット 'type' です。

しかし、私はまだPHPがそれほど得意ではないので、どなたかこの部分を書き直してエラーをなくすのを手伝っていただけませんか?ありがとうございます。(エラーは32行目から始まっており、これは以下のif文の始まりです)

以下はそのコードです。

/* new version */
    function get_attachment_struct( $inputs ){
        $attach = array();

    if( $inputs['type'] == 'attach' ){ 
            $name = $inputs['name'];
            $attach = array(
                0 => array(
                    'name' => $name,
                    'type' => 'text',
                    'label' =>  'Attachment URL',
                    'lvisible' => false,
                    'upload' => true,
                ),
                1 => array(
                    'name' => $name .'_id',
                    'type' => 'hidden',
                    'upload' => true
                ),
            );

            if( isset( $inputs[ 'classes' ] ) ){
                $attach[0]['classes'] = $inputs[ 'classes' ];
                $attach[1]['classes'] = $inputs[ 'classes' ] . '_id';
            }
        }
        return $attach;
    }

    /* new version */

解決方法は?

if ($inputs['type'] == 'attach') {

このコードは有効ですが、関数パラメータである $inputs を配列で指定します。を使用すると、quot;Illegal string offset"の警告が表示されます。 $inputs['type'] は、この関数に配列ではなく文字列が渡されることを意味します。(そして、文字列のオフセットが数値であることから 'type' は適切ではありません)。

つまり理論的には、コードの呼び出し側が正しいパラメータを提供していないことに問題があるのです。

しかし、この警告メッセージはPHP 5.4で新たに表示されるようになったものです。古いバージョンでは、このような場合、警告は表示されませんでした。古いバージョンでは、この現象が発生しても警告は表示されず、黙って 'type'0 で、その文字列の0文字目(最初の文字)を取得しようとします。つまり、もしこのコードが動作することになっていたとしたら、それはこのように文字列を悪用しても PHP 5.3 以下では苦情が出ないからです。(多くの古い PHP コードが、アップグレード後にこの問題を経験しました)。

をデバッグしたくなるかもしれません。 なぜ を実行することで、関数に文字列が渡され、その文字列がどのような値であるかを調べることができます。 var_dump($inputs); を関数内で使用します。しかし、PHP 5.3 のように動作させるために警告を黙らせるだけなら、この行を次のように変更します。

if (is_array($inputs) && $inputs['type'] == 'attach') {