PHP equivalent of JavaScript bind -
first excuse english i'm not native speaker , sorry if looks rough, first time post on site. problem quite simple think. let's say, have :
class { function foo() { function bar ($arg){ echo $this->baz, $arg; } bar("world !"); } protected $baz = "hello "; } $qux = new a; $qux->foo(); in example, "$this" doesn't refer object "$qux".
how should make reffer "$qux"?
as might in javascript : bar.bind(this, "world !")
php doesn't have nested functions, in example bar global. can achieve want using closures (=anonymous functions), support binding of php 5.4:
class { function foo() { $bar = function($arg) { echo $this->baz, $arg; }; $bar->bindto($this); $bar("world !"); } protected $baz = "hello "; } $qux = new a; $qux->foo(); upd: however, bindto($this) doesn't make sense, because closures automatically inherit this context (again, in 5.4). example can simply:
function foo() { $bar = function($arg) { echo $this->baz, $arg; }; $bar("world !"); } upd2: php 5.3- seems possible ugly hack this:
class { function foo() { $me = (object) get_object_vars($this); $bar = function($arg) use($me) { echo $me->baz, $arg; }; $bar("world !"); } protected $baz = "hello "; } here get_object_vars() used "publish" protected/private properties make them accessible within closure.
Comments
Post a Comment