Php 致命错误:不在对象上下文中时使用$this错误
我得到了一个致命的错误:当运行下面的代码时,在不在对象上下文中使用$this。我正在写一个脚本,将我的电子邮件转发到另一个帐户。请帮帮我。我是php的新手。错误指向Php 致命错误:不在对象上下文中时使用$this错误,php,mime,Php,Mime,我得到了一个致命的错误:当运行下面的代码时,在不在对象上下文中使用$this。我正在写一个脚本,将我的电子邮件转发到另一个帐户。请帮帮我。我是php的新手。错误指向if(is_resource($this->connection))行。但据我所知,那里一切都很好 $hostname = '{imap.xyz.com:993/imap/ssl}INBOX'; $username = 'aaaaa@xyz.com'; $password = 'xxxxxxxxx'; $connection = i
if(is_resource($this->connection))
行。但据我所知,那里一切都很好
$hostname = '{imap.xyz.com:993/imap/ssl}INBOX';
$username = 'aaaaa@xyz.com';
$password = 'xxxxxxxxx';
$connection = imap_open($hostname,$username,$password) or die('Cannot connect to Tiriyo: ' . imap_last_error());
function Message_Parse($id)
{
if (is_resource($this->connection))
{
$result = array
(
'text' => null,
'html' => null,
'attachments' => array(),
);
$structure = imap_fetchstructure($this->connection, $id, FT_UID);
if (array_key_exists('parts', $structure))
{
foreach ($structure->parts as $key => $part)
{
if (($part->type >= 2) || (($part->ifdisposition == 1) && ($part->disposition == 'ATTACHMENT')))
{
$filename = null;
if ($part->ifparameters == 1)
{
$total_parameters = count($part->parameters);
for ($i = 0; $i < $total_parameters; $i++)
{
if (($part->parameters[$i]->attribute == 'NAME') || ($part->parameters[$i]->attribute == 'FILENAME'))
{
$filename = $part->parameters[$i]->value;
break;
}
}
if (is_null($filename))
{
if ($part->ifdparameters == 1)
{
$total_dparameters = count($part->dparameters);
for ($i = 0; $i < $total_dparameters; $i++)
{
if (($part->dparameters[$i]->attribute == 'NAME') || ($part->dparameters[$i]->attribute == 'FILENAME'))
{
$filename = $part->dparameters[$i]->value;
break;
}
}
}
}
}
$result['attachments'][] = array
(
'filename' => $filename,
'content' => str_replace(array("\r", "\n"), '', trim(imap_fetchbody($this->connection, $id, ($key + 1), FT_UID))),
);
}
else
{
if ($part->subtype == 'PLAIN')
{
$result['text'] = imap_fetchbody($this->connection, $id, ($key + 1), FT_UID);
}
else if ($part->subtype == 'HTML')
{
$result['html'] = imap_fetchbody($this->connection, $id, ($key + 1), FT_UID);
}
else
{
foreach ($part->parts as $alternative_key => $alternative_part)
{
if ($alternative_part->subtype == 'PLAIN')
{
echo '<h2>' . $alternative_part->subtype . ' ' . $alternative_part->encoding . '</h2>';
$result['text'] = imap_fetchbody($this->connection, $id, ($key + 1) . '.' . ($alternative_key + 1), FT_UID);
}
else if ($alternative_part->subtype == 'HTML')
{
echo '<h2>' . $alternative_part->subtype . ' ' . $alternative_part->encoding . '</h2>';
$result['html'] = imap_fetchbody($this->connection, $id, ($key + 1) . '.' . ($alternative_key + 1), FT_UID);
}
}
}
}
}
}
else
{
$result['text'] = imap_body($this->connection, $id, FT_UID);
}
$result['text'] = imap_qprint($result['text']);
$result['html'] = imap_qprint(imap_8bit($result['html']));
return $result;
}
return false;
}
$to = 'aaaa@gmail.com';
$subject = 'the subject';
$message = 'test';
$id=1;
Message_Parse($id);
$headers = 'From: aaa@xyz.com' . "\r\n" .
'Reply-To: aaa@xyz.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$mail = mail($to, $subject, $result, $headers);
if($mail){
echo "YES";
} else{
echo "NO";
}
$hostname='{imap.xyz.com:993/imap/ssl}收件箱';
$username='1aaaaa@xyz.com';
$password='xxxxxxxxx';
$connection=imap_open($hostname,$username,$password)或die('cannotconnecttotiriyo:'。imap_last_error());
函数消息解析($id)
{
如果(是_资源($this->connection))
{
$result=数组
(
'text'=>null,
'html'=>null,
“附件”=>array(),
);
$structure=imap\u fetchstructure($this->connection,$id,FT\u UID);
如果(数组\键\存在('parts',$structure))
{
foreach($structure->parts as$key=>$part)
{
如果($part->type>=2)| |($part->ifdisposition==1)&($part->disposition==ATTACHMENT'))
{
$filename=null;
如果($part->ifparameters==1)
{
$total_parameters=count($part->parameters);
对于($i=0;$i<$total_参数;$i++)
{
如果($part->parameters[$i]->attribute=='NAME')| |($part->parameters[$i]->attribute=='FILENAME'))
{
$filename=$part->parameters[$i]->value;
打破
}
}
如果(为null($filename))
{
如果($part->ifdparameters==1)
{
$total_dparameters=计数($part->dparameters);
对于($i=0;$i<$total_dparameters;$i++)
{
if($part->dparameters[$i]->attribute=='NAME')| |($part->dparameters[$i]->attribute=='FILENAME'))
{
$filename=$part->dparameters[$i]->value;
打破
}
}
}
}
}
$result['attachments'][]=数组
(
'filename'=>$filename,
'content'=>str_replace(数组(“\r”,“\n”),'',trim(imap_fetchbody($this->connection,$id,($key+1),FT_-UID)),
);
}
其他的
{
如果($part->subtype=='PLAIN')
{
$result['text']=imap_fetchbody($this->connection,$id,($key+1),FT_-UID);
}
else if($part->subtype=='HTML')
{
$result['html']=imap_fetchbody($this->connection,$id,($key+1),FT_-UID);
}
其他的
{
foreach($part->parts as$alternative\u key=>$alternative\u part)
{
如果($alternative_part->subtype=='PLAIN')
{
回显“.$alternative_part->subtype.”.$alternative_part->encoding.”;
$result['text']=imap_fetchbody($this->connection,$id,($key+1)。'。($alternative_key+1),FT\u UID);
}
else if($alternative_part->subtype==“HTML”)
{
回显“.$alternative_part->subtype.”.$alternative_part->encoding.”;
$result['html']=imap_fetchbody($this->connection,$id,($key+1)。'。($alternative_key+1),FT\u UID);
}
}
}
}
}
}
其他的
{
$result['text']=imap\u body($this->connection,$id,FT\u UID);
}
$result['text']=imap_qprint($result['text']);
$result['html']=imap_qprint(imap_8bit($result['html']);
返回$result;
}
返回false;
}
$to$aaaa@gmail.com';
$subject='主题';
$message='test';
$id=1;
消息解析($id);
$headers='来自:aaa@xyz.com' . “\r\n”。
答复:aaa@xyz.com' . “\r\n”。
“X-Mailer:PHP/”。phpversion();
$mail=mail($to、$subject、$result、$headers);
如果($邮件){
回应“是”;
}否则{
回应“否”;
}
$此
仅存在于作为类一部分的方法中<代码>$this不存在于函数中或不属于类的任何其他地方。有关这方面的更多信息,请查看关于的PHP手册页面
如果要改为引用全局变量$connection
,可以将函数的开头更改为:
function Message_Parse($id)
{
global $connection;
if (is_resource($connection))
{
请注意,在任何语言中使用全局变量都是不好的编程实践。只需将
$this->connection
更改为$connection
$此
仅在上课时适用。此外,您可能需要调用global$connection代码>位于函数顶部。我相信任何没有传递到参数中的变量都需要调用这个关键字
有关“全局关键字”的信息,请参见:正如所有其他人所说,您不在对象内,因此不能使用$this
但是您在一个函数中,因此您也不能访问该函数之外的任何变量,除非您使其可访问
使用global
的解决方案是可行的,但是如果有一天你决定重命名你的全局变量$connection
,它会让你下地狱
更好的解决方案是将其作为第二个参数传递给函数
函数消息\u Parse($id)
应该变成函数