Jak se liší MVC a MVP?
Takže, jaký je vlastně rozdíl mezi MVC a MVP? Zkusíme použít WinMerge:

(viz Phil Haack: Everything You Wanted To Know About MVC and MVP But Were Afraid To Ask)
PHP, lambda funkce a closures
Zdá se, že PHP 5.3 bude ještě větší bomba, než jsme si mysleli. Do
dlouho očekávané a neustále oddalované verze se na poslední chvíli
dostaly lambda funkce a tzv. closures. Český ekvivalent termínu neznám, ale
dalo by se použít anonymní nebo lambda
funkce. Pokud máte zkušenost s JavaScriptem nebo jazykem Ruby, budou vám
připadat velmi povědomé:
$lambda = function () {
echo 'Hello World!';
};
$lambda(); // vypíše Hello World!
Lambda funkce najdou uplatnění především tam, kde potřebujeme vytvořit callback na jedno použití. Příkladem jsou třeba volání preg_replace_callback nebo array_map, které bylo doposud spojeno s nutností deklarovat funkci, která však pro zbytek programu byla zcela zbytečná. Od PHP 5.3 ji bude možné nahradit lambda funkcí:
// convert to camelCaps
$s = 'hello-world';
$s = preg_replace_callback(
'#-([a-z])#',
function ($matches) { return strtoupper($matches[1]); },
$s
);
echo $s; // vypíše helloWorld
Closures rozšiřují schopnosti lambda funkcí tak, že jim zpřístupní (vybrané) proměnné z kontextu, ve kterém jsou deklarované:
function getMultiplier($product)
{
return function ($value) use ($product) {
return $value * $product;
};
}
// $multi23 je "násobička 23"
$multi23 = getMultiplier(23);
echo $multi23(3); // vypíše 69
Jiným příkladem je přesměrování výstupu do souboru:
function redirect($file)
{
$handle = fopen($file, 'w');
ob_start(function($buffer) use ($handle) {
fwrite($handle, $buffer);
});
}
redirect('output.html');
echo 'Hello World!'; // místo na obrazovku se vypíše do souboru
Jak to funguje interně? Lambda funkce a closures jsou representovány
objektem finální třídy Closure s jedinou magickou funkcí
__invoke(). Ta sama o sobě zajišťuje, že s objekty
spolupracují interní funkce a lze je použít všude tam, kde se očekává
pseudotyp callback. Také is_callable($lambda) vrací TRUE.
Zapouzdření callbacku tak dostává nový rozměr:
class Salute
{
public function __invoke($name)
{
echo "Hello $name!";
}
}
$salute = new Salute;
$salute('World'); // vypíše Hello World!
Jsou lambda funkce v PHP skutečně tak převratnou novinkou? V PHP je totiž lze do jisté míry nahradit skrze eval nebo create_function. Jenže za jakou cenu – tělo funkce je nutné zapsat jako řetězec, což je nepřehledné a nefunguje zvýrazňování kódu v IDE, takové funkce nelze debugovat, je znemožněno použití opcode cache atd. Dá se říci, že lambda funkce legalizují osm let starou funkci create_function pro použití ve zdravém kódu.
Podrobný popis najdete v propozicích a můžete si je rovnou i vyzkoušet – stačí stáhnout vývojovou verzi PHP 5.3.
Sraz Nette Framework v pátek 18. 7.
Sdružení rodičů a přátel Nette Frameworku vás srdečně zve na tradiční členskou schůzi vývojářů webových aplikací. Program bude zahájen volbou nástěnkáře, bude následovat recitace básní oslavujících Nette Framework, poplácávání se, kritizování a posmívání se ostatním frameworkům a konzumace alkoholických nápojů dle vlastního výběru.

Účast nutná!
- termín: pátek 18. července od 16 hodin
- místo konání: Brno, Schnitzel House na Běhounské 15 (mapka)
Pokud máte chuť probrat věci týkající se vývoje webových aplikací v Nette Frameworku, ale také vývoje frameworku samotného, budu rád, když dorazíte. Jde čistě o neformální setkání. Abych mohl vybrat a zamluvit nějaký prostor (salonek v restauraci blízko centra – máte tip?), potřeboval bych vědět, kolik lidí asi tak dorazí, takže prosím svou účast potvrďte v komentářích. Jestli pojedete autem a můžete někoho vzít, napište svůj kontakt a odkud jedete.
Těším se!
Pište na Twitter z adresního řádku prohlížeče
Timy přišel s geniálním nápadem, jak psát na Twitter přímo z adresního řádku prohlížeče. Tedy podobně, jako když googlíte pomocí „g keyword“, můžete štěbetat způsobem „tw Ach jo, dostala jsem zase krámy.“ Kromě toho, že je to pohodlné, to navíc řeší problém – pokud se zprávu nepodaří odeslat, máte šanci to zkusit znovu. V případě ajaxového odesílání přímo ze stránek Twitteru se totiž nezřídkakdy stane, že zpráva odejde do věčných lovišť. Celý svět pak zůstane ochuzen o váš 140 znakový elaborát.
Jak na to? Jednak můžete využít přímo Timyho formulář, ale protože
mi nevyhoval, a také protože nechci prozrazovat své přihlašovací údaje,
udělal jsem si vlastní. Stáhněte si knihovničku Twitter for PHP a vytvořte skript
twitter-send.php:
<?php
header('Content-type: text/html; charset=utf-8');
if (isset($_POST['message'])) {
require_once 'twitter.class.php';
// SEM VLOŽTE SVÉ PŘIHLAŠOVACÍ ÚDAJE
$twitter = new Twitter('DavidGrudl', '******');
$status = $twitter->send($_POST['message']);
if ($status) {
header('Location: http://twitter.com/home');
exit;
} else {
echo '<body style="background:red"><h1>Chyba</h1>';
}
}
?>
<h1>Send message to Twitter</h1>
<form action="#" method="post">
<textarea name="message" cols="100"><?php
echo @htmlSpecialChars($_POST['message']) ?></textarea>
<br><input type="submit">
</form>
Oba soubory nahrajte na svůj server (klidně i lokální) a otevřete
twitter-send.php v prohlížeči. Nyní s ním asociujte
vyhledávací klíč (tedy jako pro Google je „g“, tak pro tento skript bude
např. „tw“). Popis definice asociace ve Firefoxu nebo IE nechám na
komentátorech, protože to sám neumím. V Opeře je to třeskutě
jednoduché: klikněte pravým tlačítkem myši na textové pole, zvolte
Vytvořit vyhledávač… a do okénka Klíč zadejte „tw“ a
potvrďte.
To je vše! Příjemné štěbetání.
Twitter for PHP
Twitter for PHP is a very small and easy-to-use library for sending messages to Twitter and receiving status updates.
It requires PHP (version 5 or better) with cURL extension and is licensed under the New BSD License.
Usage
Create object using your credentials (user name and password)
$twitter = new Twitter($userName, $password);
The send() method updates your status. The message must be encoded in UTF-8:
$twitter->send('I am fine today.');
The load() method returns the 20 most recent status updates posted in the last 24 hours by you and optionally by your friends:
$withFriends = FALSE;
$channel = $twitter->load($withFriends);
The returned channel is a SimpleXMLElement object. Extracting the information from the channel is easy:
<ul>
<?foreach ($channel->status as $status): ?>
<li><a href="http://twitter.com/<?=$status->user->screen_name?>"><?=$status->user->name?></a>:
<?=$status->text?>
<small>at <?=date("j.n.Y H:m", strtotime($status->created_at))?></small>
</li>
<?endforeach?>
</ul>
You can obtain the latest development version from our subversion (SVN) repository.
(má angličtina je strašná, budu rád, když mě opravíte).
novější články