Topic: Tip'sas su anoniminėmis funkcijomis

Rašant atvaizdavimo logiką mane dažnai erzindavo tai, kad nebūdavo patogu įkišti funkciją į išvedamą stringą.

pvz:

echo "šiandien yra {date('Y')} metai";

žinoma, visada galima naudoti ką nors panašaus

echo "šiandien yra ".date('Y')."metai";

bet bent jau man toks stilius nelabai, juolab kai išvedamas teksto blokas, o IDE spalvoja ne visai, kaip norėtųsi.

TADAM

$metai = function () {
   return date('Y')
};
 
echo šiandien yra {$metai()} metai";

PHP5.3 išgelbsti dieną :)

žinoma tik datai atvaizduoti rašytis funkcijas gal ir ne pats geriausias sprendimas, bet ta tenka naudoti dekoratorius su vos ne keliolika parametrų, galimybė visą ta gėrį iškelti kur nors iš pagrindinės dalies atrodo visai viliojanti.

Tokioj situacijoj gal net galima pateisinti globals naudojimą.....

Re: Tip'sas su anoniminėmis funkcijomis

Na panašu, kad pas tave ne MVC, o tas nėra gerai... Aš šiaip propaguoju "teisingą" eilučių formavimą su operatoriumi "." .

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Tip'sas su anoniminėmis funkcijomis

Bent mano nuomone edit/clone/move up/down/publish/delete ir panašių veiksmų mygtukų darymas yra dar visai View dalis. Bet kai kiekvienam veiksmui išvesti reikia bent 2 eilučių, nekalbant apie atskiras situacijas (pvz pirmas elementas neturi turėti "move up", etc), tokie fintai gan praverčia.

čia gal dar klausimas, kurioje vietoje MVC reikia timestampą versti laiku.

Beje kodėl naudoji būtent tašką, o ne kablelį? Naudojant kablelį, net jei funkcija naudoja echo, ne return, rezultatas bus išvestas savo vietoje :)

Re: Tip'sas su anoniminėmis funkcijomis

Pvz.:

<html>
<body>
Sąrašas:
<ul>
 <?php foreach($array as $element):?>
 <li><?php echo $element; ?></li>
 <?php endforeach; ?>
</ul>
</body>
</html>

Ir

<?php
echo '<html>';
echo '<body>';
echo 'Sąrašas:';
echo '<ul>'; 
foreach($array as $element) {
 echo '<li>'.$element.'</li>';
}
echo '</ul>';
echo '</body>';
echo '</html>';
?>

Kaip manai kuris View variantas geresnis? Rezultatas abiejų tas pats.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Tip'sas su anoniminėmis funkcijomis

anonimai yra gerai iki tam tikro lygio, šiuo atveju datą galima išgauti tiesiog ant kintamojo.
čia tas pats kaip panaudoti SQL subquery ten, kur jo nereikia arba naudoti belenkur :)
anonimas neturi būti pagrindinis veiksmas, jo paskirtis atlikti tik šalutinį veiksmą!

Kiek maigyklių sudėvėjai ?

Re: Tip'sas su anoniminėmis funkcijomis

@zygis

Aš labiau turėjau omenyje pvz:

<ul>
    <?
    /* $data = array(
      array('id' => 10, 'title' => 'Pavadinimas 1', 'can_edit' => true),
      array('id' => 11, 'title' => 'Pavadinimas 2', 'can_edit' => false),
      array('id' => 15, 'title' => 'Pavadinimas 3', 'can_edit' => true),
      ); */


    $edit = function($item) use($html, $session) {
                if ($item['can_edit'])
                    return $html->link($html->image('edit.png') . 'EDIT ', array('controller' => 'Pages',
                                'action' => 'edit', 'id' => $item['id'],
                                'token' => $session->read('token')), array('escape' => false));
                return ' - ';
            };

    $move_up = function($item) use($html, $session) {
                if ($item['can_edit'])
                    return $html->link($html->image('up.png') . 'UP ', array('controller' => 'Pages',
                                'action' => 'move', 'id' => $item['id'], 'direction' => 'up',
                                'token' => $session->read('token')));
                return ' - ';
            };
    $move_down = function () {/**/
            };
    $clone = function () {/**/
            };
    $share = function () {/**/
            };
    $publish = function () {/**/
            };


    foreach ($data as $pos => $item) {
        echo "<li> {$item['title']}
            {$edit($item)}  {$clone($item)}  {$share($item)} ",
            ($pos !== 0) ? $move_up($item) : ' - ',
            ($pos !== (count($data) - 1)) ? $move_down($item) : ' - ',
            "</li>";
    }
    ?>
</ul>

Bent man patogiau skaityti tokį kodą, nei kai viskas į vieną begalinį foreach sukišta. O jei dar kokie tag'ai paduoti kaip masyvas kiekvienam item'ui, dar po ciklą cikle knistis - paskui vien kol atseki kur kuris ciklas baigiasi....

Teisingai md5 rašo - persistengt galima bet kurį įrankį naudojant ;)

Vsio, varau kavos :)