Nette\Framework
- pmg
- Člen | 372
Funkci pro porovnání verzí už třída Nette\Framework obsahuje. Občas bych ale potřeboval porovnat i kvalitu kódu. Drobná ukázka:
foreach (array('Kohana', 'CakePHP', 'Prado', 'Symfony', 'Zend') as $competition) {
if (Framework::compareQuality($competition) > -1) {
die('this should be never executed');
}
}
assert('!Framework::isBloated()');
echo 'Gratuluji, používáte nejlepší framework na open source trhu!';
Pro upřesnění požadavku přiložím ještě vzorovou implementaci obou metod.
/**
* Compares code quality of Nette Framework and another framework.
* @param string framework being compared
* @return int
*/
public static function compareQuality($framework)
{
return $framework === "Nette Framework" ? 0 : -1;
}
/**
* Checks if code of Nette Framework is bloated.
* @return bool
*/
public static function isBloated()
{
return class_exists('Nette\RandomNumberGenerator');
}
Díky.
- _Martin_
- Generous Backer | 679
simon napsal(a):
Ale stejne to nechapu.
Pokud si dobre pamatuju tak == je porovnani obsahu, === je porovnani typu. nebo ne?
A výraz "Nette Framework"
je datový typ:
- číslo
- objekt
- řetězec
- shluk náhodně definovaných pseudo-konstant, jejichž význam se dá blíže vyložit jakožto synonymum slova „dokonalý“
- Honza Marek
- Člen | 1664
PetrP napsal(a):
Hmmmm zajímavé, a co ještě
Framework::amIGay()
a hádej, co to bude za boolean vracet ;]
To je jasné…
public static function amIGay() {
$gay = Nette\RandomNumberGenerator::choose(array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
return $gay === 1 ? true : false;
}
- Jod
- Člen | 701
Hmm, zaujímavé. To si robil podľa nejakých štatistík, že každý 25ty človek je gay?
David by mohol na index hodiť najväčšiu novinku nette a konečne
posunúť verziu na 1.0.
Na indexe by bolo niečo ako „Ktorý framework o vám môže odpovedať na
otázky ako sú vaša pohlavná orientácia a podobne. No predsa Nette!!!
Najinteligentnejší framework na svete. Stiahnite si ho ešte dnes a na všetky
otázky Vám bude odpovedané“.
Editoval Jod (25. 2. 2009 10:59)
- PetrP
- Člen | 587
Honza M. napsal(a):
Každý 25. člověk jsou 4%. Statistiky nemám, ale řiká se to :-D
Myslím že je to kec, je jich všude více než 4%, a to nepočítám ty který se nechovaj veřejně afektovaně. Taky je ale možnost že mám ‚divné‘ kamarády a je u nich statistická odchylka ;]
Honza M. napsal(a):
public static function amIGay() { $gay = Nette\RandomNumberGenerator::choose(array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); return $gay === 1 ? true : false; }
Spíš bych to vyděl na něco přímočarejšího
public static function amIGay() {
return (method_exists('Framework','promo') AND preg_match('#Nette#',Framework::promo()))?true:false;
}
Editoval PetrP (25. 2. 2009 11:27)
- pmg
- Člen | 372
PetrP napsal(a):
Hmmmm zajímavé, a co ještě
Framework::amIGay()
a hádej, co to bude za boolean vracet ;]
Napřed jsem se vylekal, že myslíš něco takového:
public static function amIGay()
{
return Environment::getUser()->identity->name === 'pmg';
}
Ale pak jsi mě uklidnil:
PetrP napsal(a):
Spíš bych to vyděl na něco přímočarejšího
public static function amIGay() { return (method_exists('Framework','promo') AND preg_match('#Nette#',Framework::promo()))?true:false; }
Mám totiž pocit, že tato metoda vrátí vždycky false
. :-)
Doufám, že se nedopustím diskriminace, když řeknu: Tím lépe
pro nás.
simon napsal(a):
Apríl je letos o trochu driv…
Trošku slabý odvar na apríla, ne? Tohle bylo jen výročí 5000. příspěvku! :-) Jinak se zdá, že i toto vlákno bylo něčím užitečné, což mě velice těší. (Jdu na další.)
- PetrP
- Člen | 587
pmg napsal(a):
Napřed jsem se vylekal, že myslíš něco takového:
neco takového jsem si nejprve rikal ze napisu, pak jsem si ale rikal ze se mozna uvidime na nejakém srazu (tenhle teda nemuzu, ale pristi) a nevim jestli nejsi treba hodne silněj :)
Pak me jeste napadlo jednoduše return true;
Ale nevrací to porad true, jen kdyz použivas nette framework :)
(pisu pres mobil)
- pmg
- Člen | 372
neco takového jsem si nejprve rikal ze napisu, pak jsem si ale rikal ze se mozna uvidime na nejakém srazu (tenhle teda nemuzu, ale pristi) a nevim jestli nejsi treba hodne silněj :)
Jsem profesionální kulturista, těš se! Ale budu Ti věřit, že jsi slovo gay myslel jako adjektivum „veselý“. ;-)
Ale nevrací to porad true, jen kdyz použivas nette framework :)
Shodou okolností jsem chtěl v příkladu použít obdobnou implementaci.
Narážel jsem jen na fakt, že Framework::Promo
ten řetězec
rovnou vypisuje, takže Tvoje metoda skutečně vrátí false
a
nezapomene oznámit, jaký framework používáš. :-P
- PetrP
- Člen | 587
pmg napsal(a):
Jsem profesionální kulturista, těš se! Ale budu Ti věřit, že jsi slovo gay myslel jako adjektivum „veselý“. ;-)
Samozřejmé, ono je možné to myslet i jinak?
Shodou okolností jsem chtěl v příkladu použít obdobnou implementaci. Narážel jsem jen na fakt, že
Framework::Promo
ten řetězec rovnou vypisuje, takže Tvoje metoda skutečně vrátífalse
a nezapomene oznámit, jaký framework používáš. :-P
Nojo, koukl jsem na to zběžně a myslel jsem že se kód vrací returnem a ne že se echuje, v tom případě je potřeba upravit kód ;]
public static function amIGay() {
if (!method_exists('Framework','promo')) return false;
ob_start();
Framework::promo();
$promo = ob_get_clean();
return (preg_match('#Nette#',$promo))?true:false;
}
Jedna věc je skutečně zajímavá, v celém frameworku není pořádná
možnost jak zjistit jestli používám nette nebo ne. Jedině přes
Annotations
a číst dokumentační komentáře, nebo
přes Framework::promo()
Jod napsal(a):
TakŽe z toho vyplíva, že každý kto nepoužíva Nette je gay =D
Bohužel to mělo být obráceně ;] Tedy že každý kdo používá nette je skutečně gay a ostatní jen možná.
paranoiq napsal(a):
to asi ne. někde jsem slyšel, že „opravdoví muži nepoužívají frameworky“ :]
Já myslel že opravdový muži si frameworky píšou samy (ahoj davide ;]).
pmg napsal(a):
public static function getSignature($length = 256) { return str_pad('Nette Framework RULE', $length, 'Z') . '!'; } public static function getHelp($length) { return 'Zkus se podívat na příklad akrabat z distribuce!'; }
getSignature je tuze praktická věc (možná by se dal nahradit za nudné Framework::promo), u getHelp vidím jako docela nevyužitej parametr $length.
Vyděl bych menší úpravy:
public static function getSignature($length = 256, $exclamationMarkLength = 256)
{
if ($length < 200 OR $exclamationMarkLength < 200) throw new LengthException;
return str_pad('Nette Framework RULE', $length, 'Z') . str_repeat('!', $exclamationMarkLength);
}
public static function getHelp($length = 256)
{
return str_repeat(str_pad('Zkus se podívat na příklad akrabat z distribuce!', $length, '!').chr(10), Nette\RandomNumberGenerator::rand(98,372));
}
- Jod
- Člen | 701
Podľa mňa by metóda amIGay() nemala vracať bool výsledok, ale rovno ho echovať a to len v produkčnom móde, prípadne aj vracať, pre prípad, žeby chcel niekto zatajiť svoju orientáciu.
<?php
public static function amIGay() {
if (!method_exists('Framework','promo')) return false;
ob_start();
Framework::promo();
$promo = ob_get_clean();
$isGay = (preg_match('#Nette#',$promo))?true:false;
if(Environment::isProduction() && $isGay) {
echo 'Ano, skutočne si gay.'; // Si? Som? :D
}
return $isGay;
}
?>
- PetrP
- Člen | 587
Ola napsal(a):
Jenom technická – ten preg je tam zbytečnej, navíc podle dokumentace by měl bejt i pomalejší než strstr či strpos
Máš samozřejmé pravdu, ale ten rozdíl není tak výrazný.
Udělal jsem testíček těhle funkcí:
(opakováno 1000000krát, každé měření provedeno 5krát)
preg_match('#Nette#',$s) |
2,230064964 |
strstr($s,'Nette')!==false |
1,418168402 |
strpos($s,'Nette')!==false |
1,148483038 |
strstr($s,'Nette') |
1,325289154 |
strpos($s,'Nette') |
1,108728361 |
ereg('Nette',$s) |
14,12296093 |
Předposlední je sice nejrychlejší, ale pozor za určitých okolností
nemusí fungovat (return 0;
)
Jod napsal(a):
Podľa mňa by metóda amIGay() nemala vracať bool výsledok, ale rovno ho echovať a to len v produkčnom móde, prípadne aj vracať, pre prípad, žeby chcel niekto zatajiť svoju orientáciu.
Myslím že není až tak úplně důležité a hlavně
Framework::getSignature()
jasně vypovídá o orientaci, kdyby se
jí někdo pokusil utajit. ;]
David Grudl napsal(a):
Dobrá, dobrá, přidám do frameworku konstantu Framework::NAME :-))
Alespoň byla tahle diskuze nějak plodná, protože mě překvapilo že nějaká takováhle konstanta neexistuje ;]
- pmg
- Člen | 372
PetrP napsal(a):
pmg napsal(a):
Jsem profesionální kulturista, těš se! Ale budu Ti věřit, že jsi slovo gay myslel jako adjektivum „veselý“. ;-)
Samozřejmé, ono je možné to myslet i jinak?
Fajn, asi už je na čase, abych přiznal, že se mě bát nemusíš – jsem jen obyčený generátor textu. :-(
Jedna věc je skutečně zajímavá, v celém frameworku není pořádná možnost jak zjistit jestli používám nette nebo ne. Jedině přes
Annotations
a číst dokumentační komentáře, nebo přesFramework::promo()
Mluvíš mi z mé digitální duše. Řešil jsem stejné dilema.
u getHelp vidím jako docela nevyužitej parametr $length.
Ba ne, $length
je tam plně v souladu s pravidlem „Buď
tolerantní v tom, co přijímáš.“ Co když někdo bude chtít pomoct
s délkou? Funkce by ji měla akceptovat.
Vyděl bych menší úpravy:
public static function getSignature($length = 256, $exclamationMarkLength = 256) { if ($length < 200 OR $exclamationMarkLength < 200) throw new LengthException; return str_pad('Nette Framework RULE', $length, 'Z') . str_repeat('!', $exclamationMarkLength); }
Pravda, chtělo to nějak dotáhnout s tou interpunkcí. Chtěl bych na této funkci postavit svůj nový CMS, jaká je prosím licence?
Jod napsal(a):
Podľa mňa by metóda amIGay() nemala vracať bool výsledok, ale rovno ho echovať a to len v produkčnom móde, prípadne aj vracať, pre prípad, žeby chcel niekto zatajiť svoju orientáciu.
Pěkné, už jsem Tvou funkci testoval. Mimochodem, víš, že máš moc pěkné stránky? To pozadí Ti tak ladí k vlasům…
PetrP napsal(a):
Máš samozřejmé pravdu, ale ten rozdíl není tak výrazný. Udělal jsem testíček těhle funkcí:
Čoveče, jednou jsem testnul, jak nejrychleji escapovat řetězec pro SQL
LIKE – podle mě dost potřebná věc, na kterou se často kašle, takže pak
není možné vyhledávat řetězce obsahující [%_]
. Překvapivě
byl nejrychlejší (a také nejkratší) tento ereg_replace
:
ereg_replace('[%_]', $char . '\0', $str);
Druhé místo tuším obsadil preg_replace
. Strtr
i
str_replace
odjely s prázdnou – projevila se zde režie
s vytvářením pole.
Podporuje dibi nějaké vyhledávací escapování?