PHP using $this

Pozdrav,

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?

Verzije ispod 5.4.0 ne mogu referencirati $this unutar anonimne funkcije. Baci oko ovdje za potencijalno rijesenje: http://stackoverflow.com/questions/3722394/accessing-private-variables-from-within-a-closure

1 Like

Evo sada ce ti raditi :slight_smile: PHP verzija na accountu ti je promjenjena na 5.6 :slight_smile:

1 Like

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

Hehe…ma i očekivao sam za konačno rješenje da je najprihvatljivija opcija podizanje verzije PHP-a …ali pitanja su čisto da nekog vraga naučim putem :slight_smile:

Nisam do sad znao za $a =& $b :slight_smile: