NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Using $this when not in object context

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Lava
Člen
Avatar
Lava:6.2.2020 14:59

Chcem pristúpiť k premennej, definovanej vrámci classy cez $this v konkrétnej metódy

Zkusil jsem: Tu je moj kód

<?php

class Mail {
    protected $headers = [
        'From' => '[email protected]',
        'MIME-Version' => '1.0',
        'Content-Type' => 'text/html',
        'charset' => 'ISO-8859-1'
    ];

    static function verificationEmail($to, $subject, $messageData = null, $headers = null) {
        $messageData = '<h2>Overenie e-mailovej adresy</h2><p>Pre overenie Vašej e-mailovej adresy kliknite na tento link: blasfgydfaef</p>';

        mail($to, $subject, $messageData, $this->headers);
    }
}

Chci docílit: Na predpredposlednom riadku chcem tie headers použiť ako parameter funkcie mail(). Dostávam chybu

Fatal error: Uncaught Error: Using $this when not in object context in ...
Odpovědět
6.2.2020 14:59
Aspartám, sacharín, to je môj vitamín
Avatar
Odpovídá na Lava
Martin Konečný (pavelco1998):6.2.2020 15:03

Ahoj, $this lze použít pouze v instanci objektu, tzn. nejde to použít, když máš statickou metodu. V téhle situaci máš (minimálně) dvě možnosti:

  • atribut mít taky statický, tedy protected static $headers a k nim pak přistupovat jako self::$headers
  • nemít ani metodu statickou a místo Mail::verifica­tionEmail(...) vytvořit instanci, tedy
$mail = new Mail();
$mail->verificationEmail();

Zároveň osobně doporučuji metody pojmenovávat slovesy, tedy třeba sendVerificationEmail.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
6.2.2020 15:03
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.