为什么会出现不受支持的操作数错误(PHP)?

时间:2019-05-20 11:29:13

标签: php

我正在测试一项新功能,突然开始收到不受支持的操作数类型错误消息。捕获错误的代码不是我写的,因此我无法更改它。我完全不知道为什么我会出错。

错误表明它是在线的第76行,即

$transcripts[$inmateshort] = $job->getTranscript() + array(
    'inmatename' => $inmateshort,
    'inmatelong' => $inmatelong,
    'parentid' => $job->parentid
);

if的else部分。

更多代码:

我在这里调用该函数:

echo '<a href="' . site_url('invoice/copyTranscriptsToParent/' . $job['id']) . '" id="copyCreateInvoice">Copy transcripts to parent job</a>';

这是函数:

function copyTranscriptsToParent($jobs) {
    $transcripts = array();
    foreach ($jobs as $job) {
        $name = explode(' ', strtok($job->re, ';'), 2); 
        $nameshort = $name[1] . ', ' . substr($name[0], 0, 1); 
        $namelong = $name[1] . ', ' . $name[0]; 
        if (array_key_exists($nameshort, $transcripts)) {
            $transcripts[$nameshort]['personname'] = $transcripts[$nameshort]['namelong']; 
            $transcripts[$namelong] = $job->getTranscript() + array('personname' => $namelong, 'parentid' => $job->parentid);
        } else {
            $transcripts[$nameshort] = $job->getTranscript() + array('personname' => $nameshort, 'namelong' => $namelong, 'parentid' => $job->parentid);
        } 
    }
    $files = array();
    foreach ($transcripts as $transcript) {
        $origfilename = strtoupper($transcript['personname']);
        $filename = $origfilename;
        $i = 1;
        while (in_array($filename, $files)) {
            $i++;
            $filename = $origfilename . ' (' . $i . ')';
        }
        $files[] = $filename;
        $filename .= '.pdf';
        $attachmentid = $this->CI->MJob->getNewAttachmentId();
        $this->CI->S3->copyFile('uploads/' . $transcript['jobid'] . '/' . $transcript['origfilename'],
                            'uploads/' . $transcript['parentid'] . '/' . $filename,
                            $transcript['bucket']);
        $this->CI->MJob->updateAttachment($attachmentid, $transcript['parentid'], $filename, '', $transcript['personname'] . ' - transcript', 'application/pdf', 0, 'transcript', 0, $transcript['bucket']);
    }
    return count($transcripts);
}

正如我所说,我无法更改此功能,那么为什么会出现错误?非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以尝试使其无错误,如下所示:-

if( !empty($job->getTranscript()) ) {

     if( gettype($job->getTranscript()) == "object") {
         //convert to array and store it to a variable
     }

     $getTranscript_data = $job->getTranscript();
} else {
     $getTranscript_data = array();
}


$transcripts[$inmateshort] = array_merge($getTranscript_data + array(
                                'inmatename' => $inmateshort,
                                'inmatelong' => $inmatelong,
                                'parentid' => $job->parentid
                             ));

Details information for gettype function of PHP

答案 1 :(得分:0)

从您的评论中,我们发现$job->getTranscript()返回NULL。您无法将数组添加到NULL值中,这将导致以下错误。

  

致命错误:不支持的操作数类型

由于您已声明无法更改copyTranscriptsToParent()函数,因此可以编辑getTranscript()方法,以在失败时返回一个空数组而不是null,以便始终将一个数组添加到一个数组中

或者,您可以确保传递给copyTranscriptsToParent()函数($jobs)的任何内容都具有有效的getTranscript()调用,而这些调用不会返回空值。