我正在测试一项新功能,突然开始收到不受支持的操作数类型错误消息。捕获错误的代码不是我写的,因此我无法更改它。我完全不知道为什么我会出错。
错误表明它是在线的第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);
}
正如我所说,我无法更改此功能,那么为什么会出现错误?非常感谢您的帮助。
答案 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
));
答案 1 :(得分:0)
从您的评论中,我们发现$job->getTranscript()
返回NULL
。您无法将数组添加到NULL
值中,这将导致以下错误。
致命错误:不支持的操作数类型
由于您已声明无法更改copyTranscriptsToParent()
函数,因此可以编辑getTranscript()
方法,以在失败时返回一个空数组而不是null,以便始终将一个数组添加到一个数组中
或者,您可以确保传递给copyTranscriptsToParent()
函数($jobs
)的任何内容都具有有效的getTranscript()
调用,而这些调用不会返回空值。