-2

求人広告のウェブサイトに連絡フォームを作成しました。次の関数を使用して、アップローダーの電子メールを取得します。

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

それは正常に動作し、エコーを使用して結果を取得します:

<?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']を置き換えて、代わりにuploadermailを挿入したいと思います。私は試した :

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

そして、次のエラーを返します。

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

それは可能ですか、そしてどのように正確に書くべきですか?

私は試した :

 mail($uploadermail,....

また、エラーは返されませんが、メールを受信しませんでした。ブラウザで$ uploadmailが正確に含まれているものを確認するにはどうすればよいですか?

4

2 に答える 2

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

あなたは本当にsの使用を防ぐように努めるべきstaticです。静的なものは基本的にglobalsであり、コードを緊密に結合Lし、SOLIDプログラミングを防ぎます。

于 2012-04-28T13:10:31.147 に答える
0

使用する前に、$ imageのオブジェクトをインスタンス化する必要があります!例えば

$image = new ... 
or
$image = x.GetImage(...
于 2012-04-28T13:12:35.700 に答える