DMG Posted March 31, 2008 Report 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?
marrtins Posted March 31, 2008 Report 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); ?>
DMG Posted April 1, 2008 Author Report Posted April 1, 2008 A kurš šai gadījumā saturēs datos no tās "\\2" vai kā nu to lai nosauc?
bubu Posted April 1, 2008 Report 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.
marrtins Posted April 1, 2008 Report 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.
DMG Posted April 5, 2008 Author Report 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?
bubu Posted April 6, 2008 Report Posted April 6, 2008 #2 postā tev jau pateica kā padot papildus informāciju callbackam.
DMG Posted April 6, 2008 Author Report 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 :?
marrtins Posted April 6, 2008 Report 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
DMG Posted April 6, 2008 Author Report 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
bubu Posted April 6, 2008 Report 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); ?>
marrtins Posted April 6, 2008 Report 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?
bubu Posted April 6, 2008 Report 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.
marrtins Posted April 6, 2008 Report Posted April 6, 2008 ā, nepiefiksēju. kāda problēma no kādas klases funkcijas izsaukt to checkimāge?
DMG Posted April 6, 2008 Author Report 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
Recommended Posts