我收到此错误“警告:第32行/home/mysite/public_html/wp-content/themes/evento/lib/php/extra.class.php中的非法字符串偏移'类型'
我意识到文件中的这部分代码是错误的,但是我在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 */
答案 0 :(得分:42)
if ($inputs['type'] == 'attach') {
代码有效,但它希望函数参数$inputs
是一个数组。使用$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') {
答案 1 :(得分:-1)
if(isset($rule["type"]) && ($rule["type"] == "radio") || ($rule["type"] == "checkbox") )
{
if(!isset($data[$field]))
$data[$field]="";
}
答案 2 :(得分:-2)
当我使用php ver 7.1.6时,我在WP中遇到同样的错误 - 只需将你的php版本恢复到7.0.20,错误就会消失。