Jump to content
php.lv forumi

Recommended Posts

Posted

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?

Posted

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);
?>

Posted

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.

Posted

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?

Posted

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 :?

Posted

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

Posted (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 by DMG
Posted

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);
?>

Posted
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?

Posted
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.

Posted (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 by DMG
×
×
  • Create New...