Konverze z PHP 5.3 na PHP 5.2 – Nette v2.0
- Prochy
- Člen | 91
Zdarvim,
chci se zeptat, momentálně jsem dělal projekt pro PHP 5.3, bohužel teď jsem
zjistil, že musím použít v5.2. Naštěstí projekt není nijak velký,
takže neměl být problém změnit názvy tříd apod.. Ale problém je, že se
v tom moc nevyznám. Když jsem např. používal toto:
use Nette\Application\UIPresenter,
Nette\Utils\Strings,
Nette\Utils\Html,
Nette\Applicaton\Routers;
Jak by to mělo správně vypadat pro PHP 5.2?
Myslel jsem něco takového, ale asi to mám špatně:
use NApllicationUIPresenter
....
Dále když mi to vyhodí chybu unexpected T_Function:
'rowRenderer' => function($row) {
33: return Html::el('tr')->class($row->id);
34: }
Tak jsem si zjistil, že toto asi nejde použít ve php verzi 5.2 Je to
možný nějak nahradit, nebo takovou to funkci můžu použít až ve verzi
5.3?
Děkuji za odpověď
Editoval Prochy (8. 5. 2012 14:55)
- nanuqcz
- Člen | 822
Ahoj,
u prefixované verze se vezme vždy název třídy (bez namespace) a přidá se
před něj písmeno „N“. Tedy:
# Nette pro PHP 5.3 Nette pro PHP 5.2 prefixed
Nette\Application\UI\Presenter => NPresenter
Nette\Utils\Strings => NStrings
Nette\Utils\Html => NHtml
Nette\Applicaton\Routers => NRouters
Jediná vyjímka byla myslím u Nette\Forms\Form
a
Nette\Application\UI\Form
(ve verzi pro PHP 5.2: NForm
a NAppForm
, jestli si správně pamatuju)
'rowRenderer' => function($row) { return Html::el('tr')->class($row->id); }
Html přepiš na NHtml ;-)
- Prochy
- Člen | 91
Díky za odpověd,
ale to NHtml nic neřeší, křičí to na tom řádku
'rowRenderer' => function($row) {
celý zápis je potom následovně
$grid = new Tabella(array(
'context' => $this->context,
'source' => $this->klienti->source(),
'order' => 'date_reg',
'offset' =>1,
'limit'=>30,
'sorting'=>'DESC',
'rowRenderer' => function($row) {
return NHtml::el('tr')->class($row->id);
}
));
Myslim si, že to je takzvaná lambda funkce, která je podporována až ve verzi 5.3 (více zde https://phpfashion.com/…e-a-closures)
- nanuqcz
- Člen | 822
Jo omlouvám se, máš pravdu. Můžeš místo toho použít Nette callback, to by myslím mělo fungovat (akorát tu funkci budeš muset zabalit do nějaké třídy)
- jtousek
- Člen | 951
V PHP 5.2 nejsou anonymní funkce (function beze jména). Tzn. když chceš někde použít callback tak musíš tu funkci mít někde pojmenovanou a jako callback předat její název.
//...
'rowRenderer' => array('Trida', 'metoda'), //místo array asi lze použít Nette funkci callback
//...
Trida {
function metoda($row) {
return NHtml::el('tr')->class($row->id);
}
}
Editoval jtousek (8. 5. 2012 20:15)