2017-04-24 16 views
1

私はphp-7を使用しています。テストを実行しているときにこのエラーが発生しました。私はいくつかの記事/答えを読んだことがあるが、それらは静的関数/変数に関連する場所を

public function testEmail(){ 
     $this->assertTrue(Notification::sendEmail("[email protected]",["[email protected]"],"phpunit testting","test true"),"send email"); 
    } 

Error: Using $this when not in object context 

src/Notification.php:28 
tests/NotificationTest.php:10 

それは$this->log->info(" Message sent ");

内容

<?php 
declare(strict_types=1); 
namespace CCP; 

use CCP\MyMailer; 

class Notification{ 

    private $log; 

    public function __construct(){ 
     $this->log = $_SESSION['CFG']->log; 
    } 

    public function sendEmail(string $from, array $to, string $subject, string $body): boolean{ 
     $mail = new MyMailer; 
     $mail->setFrom($from); 
     foreach($to as $value){ 
     $mail->addAddress($value); 
     } 
     $mail->Subject = $subject; 
     $mail->Body = $body; 

     if(!$mail->send()) { 
     $this->log->error(" Message could not be sent for "); 
     $this->log->error(" Mailer error: ".$mail->ErrorInfo); 
     return false; 
     } else { 
     $this->log->info(" Message sent "); 
     } 

     return true; 
    } 
} 
?> 

私のテストに失敗しましただから私はこれがどのように当てはまるのかわかりません。

+2

あなたは静的にメソッドを呼び出している:あなたは、その後sendEmailを呼び出すNotificationクラスのオブジェクトを初期化する必要があります。 – Maerlyn

+0

あなたは最後のものの後ろに '}'の最後の行を見つけられませんか、それとも行方不明ですか? –

+0

ちょうど確かにチェックされて、あなたは**間違いなく**閉じる '}'がありません。 –

答えて

2

::は定数、静的へのアクセスを可能にするトークンです、クラスのオーバーライドされたプロパティまたはメソッドしたがって、Notification::sendEmail()は、Notificationクラスの静的メソッドを呼び出すことです。

静的メソッドを呼び出すとき、オブジェクトのインスタンスは作成されません。したがって、$thisは静的として宣言されたメソッド内では使用できません。

$this->assertTrue((new Notification())->sendEmail("[email protected]",["[email protected]"],"phpunit testting","test true"),"send email"); 
0

問題は、テストでメソッドを呼び出す方法です。代わりにこれを試してください:あなたはまた、通知::対$この違いの上に読みたいかもしれません

public function testEmail() 
{ 
    $notification = new Notification(); 

    $this->assertTrue($notification->sendEmail("[email protected]",["[email protected]"],"phpunit testting","test true"),"send email"); 
} 

https://secure.php.net/manual/en/language.oop5.basic.php#language.oop5.basic.class PHPで

関連する問題