zateklo me nešto da mi radi na PHP verziji 5.5.15 , ali ne radi na verziji 5.3.29
Situacija je sljedeća:
class showCase
{
public $string;
public $id;
public function __construct($id,$string)
{
$this->id=$id;
$this->string=$this->parseString($string);
}
public function parseString($string)
{
$string=preg_replace_callback('/m/',function($match)
{
return $this->id;
},$string);
return $string;
}
}
Ovaj preg_replace ovdje nema preveć smisla…ali primjera radi. Znači, želimo dohvatiti određeni pattern u stringu, a za callback postaviti funkciju koja će odraditi određenu logiku za replace akciju.
Za tu logiku nam je potrebno povući parametre koji su svojstva instance klase.
(Ovdje sam stavio $this->id)
E sad, na novoj verziji mi ovo uredno radi…dok starija vrisne:
Fatal error: Using $this when not in object
Što se da učiniti po tom pitanju? Kako kreirati callback a da unutra dohvaćam $this atribute?
Kapiram to …samo ne uspjevam nešto, jer je primjer izvorno malo kompleksniji …znači imam unutar parseString rekurziju:
public function parseString($string)
{
$string=preg_replace_callback('/m/',function($match)
{
if($match[0]=='nesto')$return $this->parseString($match[0]);
else return $this->id;
},$string);
return $string;
}
Kako bi gornjom metodom proslijedio funkciju, pokušao sam isto kao što je primjer pokazao za “obične” varijable…ali neće tako. U JS-u bi išlo, ali PHP je vrag