php函数里面的另一个函数?

时间:2012-04-28 13:07:00

标签: php function codeigniter

我在分类广告网站上创建了一个联系表单。 我使用以下函数来获取上传者的电子邮件:

public function uploadermail()
{
    return $this->User_id?$this->User->email:lang('anonymous');
}

它工作正常,我使用echo得到结果:

<?php echo $image->uploadermail(); ?>

然后我使用函数发送邮件:

public static function sendmail_anon()
{
    $form = new Form('sendmail_anon');

    $form->field('email', 'text', array
    (
        'valid_email'   =>  true
    ));

    $form->field('message', 'textarea', array
    (
        'min_length'    =>  25
    ));

    if($data = $form->validate())
    {
        $envoi = array
        (
            'message'   =>  $data['message'],
            'email' =>  $data['email']
        );

        mail($data['email'], lang('account_details'), lang('email_contact', $envoi), 'From: noreply@'.$_SERVER['HTTP_HOST']);
    }

    return $form;
}

问题是这是从表单字段将邮件发送到电子邮件。 我想替换$ data ['email']并插入上传邮件。我试过了:

mail($image->uploadermail(), lang('account_det.....

并返回以下错误:

Fatal error: Call to a member function uploadermail() on a non-object 

是否可以这样做,我应该如何完全写出来?

我试过了:

 mail($uploadermail,....

它不会返回错误,但没有收到任何邮件,如何在浏览器上查看究竟包含$ uploadermail的内容?

2 个答案:

答案 0 :(得分:2)

这意味着$image不是类实例。所以你不能$image->uploadermail()

您可以执行以下操作查看:var_dump($image);

发布完整代码后,我发现您正在从public static function sendmail_member()访问该功能:

mail($image?$image->uploadermail():$data['email'], lang('account_details'), lang('email_contact', $envoi), 'From: noreply@'.$_SERVER['HTTP_HOST']);

但是$image永远不会在该范围内声明(/实例化)。经过进一步调查后,我发现在正确的课程中有一个名为uploadermail的方法,我想你正试图访问它。

因此,要访问该方法,您应该这样做:

self::uploadermail()

$this->uploadermail()

<强> PS

您应该尝试阻止使用static。静态内容基本上是globaltightly couple you code,它会阻止SOLID programming中的L

答案 1 :(得分:0)

您应该在使用前为$ image即时添加对象! e.g。

$image = new ... 
or
$image = x.GetImage(...