DMG Posted March 31, 2008 Report Share Posted March 31, 2008 Sveiki! Šobrīd man ir sekojoša funkcija: preg_replace_callback("/(\[img\])(.+?)(\[\/img\])/i", checkimgsize, $message) Būtībā funkcija checkimgsize pārbauda bildes izmēru un samazina bildi, ja nepieciešams. Jautājums būtu vai ir iespējams padot uz funkciju checkimgsize vēl kādas vērtības? Nu piemēram maksimālo platumu un garumu. Doma aptuveni tā: preg_replace_callback("/(\[img\])(.+?)(\[\/img\])/i", checkimgsize('\\2', 550, 800), $message) Ir kādas idejas? Link to comment Share on other sites More sharing options...
marrtins Posted March 31, 2008 Report Share Posted March 31, 2008 Ieliec papildus parametrus klasē/objektā: <? class Klase { function metode() { abababa(); } } preg_replace_callback($regex, array('Klase', 'metode'), $message); $obj = new Klase(); preg_replace_callback($regex, array($obj, 'metode'), $message); ?> Link to comment Share on other sites More sharing options...
DMG Posted April 1, 2008 Author Report Share Posted April 1, 2008 A kurš šai gadījumā saturēs datos no tās "\\2" vai kā nu to lai nosauc? Link to comment Share on other sites More sharing options...
bubu Posted April 1, 2008 Report Share Posted April 1, 2008 Tie saucās "backreference": http://lv2.php.net/preg_replace Un tie satur iekavās norādīto patternu nomačotos simbolus. \0 satur visu nomačoto stringu, \1 - pirmās iekavas, \2 - otrās, ... utt. Link to comment Share on other sites More sharing options...
marrtins Posted April 1, 2008 Report Share Posted April 1, 2008 Haha, izrādās, ka funkcija saņem visos nomačotos: <? function f() { $a = func_get_args(); print_r($a); } $data = 'abcdan'; preg_replace_callback('/(a)b/', 'f', $data); ?> Tos papildus parametrus vai nu klasē vai globāli. Link to comment Share on other sites More sharing options...
DMG Posted April 5, 2008 Author Report Share Posted April 5, 2008 Nē man vienalga neaiziet, kā lai norāda kko papildus vēl :/ Pēdējā piemērā, jau ar tikai nomačotos mēs saņemam un neko citu. Nevari kādu fikso uzrakstīt piemēram, kad nosūta vēl kko un izvada abus piem datus? Link to comment Share on other sites More sharing options...
bubu Posted April 6, 2008 Report Share Posted April 6, 2008 #2 postā tev jau pateica kā padot papildus informāciju callbackam. Link to comment Share on other sites More sharing options...
DMG Posted April 6, 2008 Author Report Share Posted April 6, 2008 Nu jā bet kā īsti tas darbojas? Man par klasēm nevisai daudz saprašanas. Cik saprotu tur padod uz funkciju, kurā ir vēl funkcija :? Bet ta sanāk, kurā vietā tos papildus datus jāpadod? Tur iekšā klasē? Man vajadzētu lai uzreiz iekš preg_replace_callback var padod 3 datus, citādāk jāraksta sanāk vairākas funkcijas :? Link to comment Share on other sites More sharing options...
marrtins Posted April 6, 2008 Report Share Posted April 6, 2008 Uzstādi tos propertijus objektam. $o = new Object; $o->w = 500; $o->h = 600; preg_replace_callback($regex, array($o, 'chekimage'), $message); Vēl vari mēģināt spēlēties ar create_function Link to comment Share on other sites More sharing options...
DMG Posted April 6, 2008 Author Report Share Posted April 6, 2008 (edited) hmm nē man vienalga nekas nesanāk. Mēģināju gan šādi: class Size { public $width = 550; public $height = 800; } preg_replace_callback('/(\[img\])(.+?)(\[\/img\])/i', array('Size', 'checkimgsize2'), $data); Gan arī: $o = array("width"=>550, "height"=>800); preg_replace_callback('/(\[img\])(.+?)(\[\/img\])/i', array($o, 'checkimgsize2'), $data); Bet nekas tā īst nestrādā :? Kur es īst kļūdos? P.S es nevēlos likt funkciju checkimgsize2 klasē, jo viņa ir aprakstīta pavisam citur. Edited April 6, 2008 by DMG Link to comment Share on other sites More sharing options...
bubu Posted April 6, 2008 Report Share Posted April 6, 2008 Nu tad atliek lietot Currying patternu: <?php function curry($func) { $args = serialize(array_slice(func_get_args(), 1)); return create_function('', '$new_args = unserialize("' . $args . '"); $old_args = func_get_args(); return call_user_func_array(' . $func . ', array_merge($new_args, $old_args)); ' ); } function checkimgsize2($width, $height, $capture) { ... return ...; } preg_replace_callback('/(\[img\])(.+?)(\[\/img\])/i', curry(checkimgsize2, 550, 800), $data); ?> Link to comment Share on other sites More sharing options...
marrtins Posted April 6, 2008 Report Share Posted April 6, 2008 hmm nē man vienalga nekas nesanāk. Mēģināju gan šādi: class Size { public $width = 550; public $height = 800; } Kur tev ir checkimgsize2? Ir iekš Size klases? Link to comment Share on other sites More sharing options...
bubu Posted April 6, 2008 Report Share Posted April 6, 2008 Kur tev ir checkimgsize2? Ir iekš Size klases? Viņš jau to saka, kur tā ir: P.S es nevēlos likt funkciju checkimgsize2 klasē, jo viņa ir aprakstīta pavisam citur. Tur jau arī bija problēma, kuru vajadzēja sākumā skaidrāk pateikt. Link to comment Share on other sites More sharing options...
marrtins Posted April 6, 2008 Report Share Posted April 6, 2008 ā, nepiefiksēju. kāda problēma no kādas klases funkcijas izsaukt to checkimāge? Link to comment Share on other sites More sharing options...
DMG Posted April 6, 2008 Author Report Share Posted April 6, 2008 (edited) ā, nepiefiksēju. kāda problēma no kādas klases funkcijas izsaukt to checkimāge? Kāpēc klases? Vienkārši stādies priekšā ka ir jau uzrakstīta gatava un gara funkcija, kura saucas "checkimgsize2" un kuru tad arī vēlos padot šīs trīs vērtības, jo pretējā gadījumā sanāk rakstīt katram izmēram savu funkciju un padot to uz šim izmēram atbilstošo funkciju, taču tas nav īpaši gudri un tapēc jautāju padomu, ka var ievietot iekš preg_replace_callback šīs trīs vērtības, lai varu izmantot šo vienu funkciju. Ceru ka tagad saprati :) bubu tavs piemērs bija tieši tas kas vajag! Liels paldies! Tikai ja varu lūgt nevari pāris vārdos pateikt, kas īsti notiek tur iekš function curry($func)? Kkā nevisai saprotu to kas tur iekšā viņā notiekas :? Lai gan ja nevēlies tad nestāsti - vienkārši interesanti zināt. Edited April 6, 2008 by DMG Link to comment Share on other sites More sharing options...
Recommended Posts