Jump to content
php.lv forumi

preg_replace_callback


DMG

Recommended Posts

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

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

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

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

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 by DMG
Link to comment
Share on other sites

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

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

ā, 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 by DMG
Link to comment
Share on other sites

×
×
  • Create New...