29

「警告:32行目の/home/mysite/public_html/wp-content/themes/evento/lib/php/extra.class.phpの文字列オフセット'タイプ'が無効です」というエラーが表示されます。

ファイル内のコードのこのセクションが間違っていることに気づきましたが、PHPはまだそれほど優れていません。エラーをなくすために、誰かがこのセクションを書き直すのを手伝ってくれるかどうか疑問に思っています。ありがとう!(エラーは、以下のifステートメントの先頭である32行目から始まります)

コードは次のとおりです。

/* 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 */
4

4 に答える 4

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

コードは有効ですが、関数パラメーター$inputsが配列である必要があります。使用時の「不正な文字列オフセット」警告$inputs['type']は、関数に配列ではなく文字列が渡されていることを意味します。(そして、文字列オフセットは数値で'type'あるため、適切ではありません。)

したがって、理論的には、問題は他の場所にあり、コードの呼び出し元が正しいパラメーターを提供していません。

ただし、この警告メッセージはPHP5.4の新機能です。これが起こった場合、古いバージョンは警告しませんでした。彼らは黙ってに変換'type'0、文字列の文字0(最初の文字)を取得しようとします。したがって、このコードが機能するはずだった場合、これは、このような文字列を悪用してもPHP5.3以下で苦情が発生しなかったためです。(多くの古いPHPコードでは、アップグレード後にこの問題が発生しています。)

呼び出し元のコードを調べて関数に文字列が与えられている理由をデバッグし、関数でaを実行してその値を確認することをお勧めしvar_dump($inputs);ます。ただし、警告を閉じてPHP 5.3のように動作させる場合は、行を次のように変更します。

if (is_array($inputs) && $inputs['type'] == 'attach') {
于 2013-03-12T13:26:06.450 に答える
0
if(isset($rule["type"]) && ($rule["type"] == "radio") || ($rule["type"] == "checkbox") )
{
    if(!isset($data[$field]))
        $data[$field]="";
}
于 2014-06-11T00:57:57.073 に答える
0
if (isset($inputs['type']) && $inputs['type'] == 'attach') {

また

if (is_array($inputs) && isset($inputs['type']) && $inputs['type'] == 'attach') {
于 2021-11-08T12:24:16.037 に答える
-3

php ver 7.1.6を使用すると、WPでも同じエラーが発生します。phpバージョンを7.0.20に戻すだけで、エラーが消えます。

于 2017-06-30T20:54:06.037 に答える