Minule jsem slíbil, že náš e-mail obdaříme přílohou. Využijeme toho však trošku
jinak, než by se dalo předpokládat: na praktické ukázce si totiž ukážeme základy
práce se třídami v PHP. Zejména pro začátečníky to nebude příliš snadné, ale
uvidíte, že se to vážně pochopit dá. Na Internetu je k sehnání mnoho skriptů
pod GPL licencí, není tedy rozumné ztrácet čas s programováním něčeho, co už
za nás udělali jiní a lépe. Dnes využijeme právě třídu, jež má za úkol odesílání
elektronické pošty a hodí se k vysvětlení objektového programování.
Co tedy budete potřebovat? Ze stránek projektu PHPMailer http://phpmailer.sourceforge.net/
si stáhnout dotyčný skript (zde
verze 1.50). Bude nám z toho celého balíčku však stačit jen jeden soubor:
"class.phpmailer.php". Dále se podívat na práci se třídami na stránkách
PHP manuálu (dokonce v češtině!) http://www.php.cz/manual/cs/ref.classobj.php.
Samozřejmostí je správná konfigurace PHP podle předchozího dílu, abyste mohli
výsledný e-mail odeslat.
Objektové programování vzbuzuje u neprogramátorů pocit tajemna, přitom je to
(alespoň co se týče toho základu, který potřebujeme pro stránky) celkem snadná
věc. Třída (nebo objekt) lze dobře vysvětlit na konkrétních předmětech z našeho
okolí. Tak třeba auto - tento pojem je třída: předpokládáme, že auto má čtyři
kola, má nějakou barvu a jezdí. No a teď přejdeme ke konkrétnímu autu: vytvoříme
jeho tzv. instanci, reálný předmět. Čtyři kola má každé, to je předdefinovaná
vlastnost samotné třídy. Barvu mu přiřadíme červenou, to je individuální vlastnost
právě této nově vytvořené instance. S touto instancí následně pojedeme do jiného
města.
Když zůstaneme u zeleninového příkladu z manuálu:
class Zelenina {
var $jedla;
var $barva;
function Zelenina( $jedla) {
$this->jedla = $jedla;
}
function je_jedla() {
return $this->jedla;
}
function jaka_barva() {
return $this->barva;
}
}
$zel = new Zelenina (true);
$zel->barva="cervena";
echo $zel -> je_jedla();
echo $zel -> jaka_barva();
|
Třída Zelenina pracuje s proměnnými $jedla a $barva. To jsou tzv. členské proměnné,
inicializované na začátku pomocí var (zkratka pro variable). Pak následují jednotlivé
funkce (zde se nazývají metody) - Zelenina(), je_jedla() a jaka_barva(). Hlavní
metoda, Zelenina(), je konstruktor, jenž vytvoří novou instanci tohoto objektu.
Všimněte si jak - použije se jako funkce s parametry, jen se před ní napíše
"new". Proměnná $zel tedy zastupuje instanci třídy Zelenina s nutným
parametrem (zde true).
Parametry se v konstruktoru zpracují poněkud divně vypadajícím způsobem $this->jedla
= $jedla. $this zastupuje dotyčnou třídu, ve které se právě pohybujeme, šipka
volá metodu nebo proměnnou v této třídě. Zde pozor: voláme tímto členskou proměnnou,
obyčejná proměnná je $barva. O členských proměnných se dá říci to, že se chovají
jako globální proměnné v rámci jedné třídy. Proto k nim můžeme přistupovat v
metodách je_jedla() nebo jaka_barva(). Opět ale jen přes volání $this->proměnná
(bez dolaru). Platí, že v rámci třídy nemůže být nic volně, vše musí být v metodách,
jinak se k tomu nedostanete. Volání se provádí přes šipku "->",
přistupujeme tím k proměnným a metodám uvnitř konkrétní třídy. Např. barvu přiřadíme
dotyčné instanci jednoduchým způsobem $zel->barva="cervena";
V praxi si ukážeme práci se třídou PHPMailer. Zmiňovaný soubor class.phpmailer.php
umístěte do jednoho adresáře s prázdným souborem phpmail.php a jedním obrázkem
podle vašeho výběru. Do prázdného souboru přijde následující kód:
require("class.phpmailer.php");
$mail = new phpmailer();
$mail->From = "odnas@server.cz";
$mail->FromName = "jmeno";
$mail->AddAddress("cil@servr.cz","Jan Novák");
$mail->AddAddress("cil2@servr2.cz");
$mail->AddReplyTo("cil3@servr3.cz","Information");
$mail->WordWrap = 50;
$mail->AddAttachment("obrazek.jpg");
$mail->AddAttachment("obrazek.jpg", "new.jpg");
$mail->IsHTML(true);
$mail->Subject = "Predmet zpravy";
$mail->Body = "Ukazka <b>HTML</b>";
$mail->AltBody = "Cisty text";
if(!$mail->Send())
{
echo "Zprava nebyla odeslana";
exit;
}
echo "Zprava byla odeslana";
?>
|
Z předchozího už byste měli odvodit, že proměnná $mail obsahuje instanci třídy
phpmailer. Její vlastnosti vytváří konstruktor phpmailer(). Např. $mail->From
= "odnas@server.cz"; přiřadí členské proměnné $From ve třídě phpmailer konstruktoru
phpmailer hodnotu mezi závorkami. Jiná věc je volání metody: $mail->AddAddress("cil@servr.cz","Jan
Novák"); předá dva parametry funkci uvnitř třídy phpmailer, jejíž název je AddAddress()
a má za úkol přidat do určitých polí správné informace o adrese příjemce. Tímto
způsobem nastavíme celou instanci této třídy k naší spokojenosti a odešleme
$mail->Send(). Její hodnota je boolean, čili buď pravda nebo nepravda. Když
neuspěje, je výsledkem nepravda a vypíše se chybová hláška.
Sami si vyskoušejte práci s touto třídou. Je dobře zdokumentovaná (byť anglicky),
takže se v ní tak snadno neztratíte. Rozhodně vám ale dá hodně prostoru k experimentování.
Doufám, že jste alespoň z části pochopili, o čem je řeč, když se řekne "objekt".
Pro další programování je to velmi důležité, neboť většina PHP skriptů funguje
právě na tomto principu.
Veselý Jan
|