|
|
|
| Как можно передать в функцию текущий объект, чтобы потом внутри можно было вызвать метод этого объекта
<?php
class SomeClass
{
public function Run()
{
$someObj = new otherObj();
$someObj->addFunc('test', function($selfObjHere)
{
//here some stuff
$data = 'hello';
$selfObjHere->doSomething($data);
});
}
public function doSomething($data)
{
echo $data;
}
}
|
| |
|
|
|
|
|
|
|
для: Ученик
(08.04.2015 в 18:27)
| | Не уверен, что правильно вас понял, но рискну предположить:
<?php
/******* PHP < 5.4 ***********/
class Other
{
public function addFunc($txt, $func)
{
$func();
}
}
class SomeClass
{
public function Run()
{
$someObj = new Other();
$self = $this;
$someObj->addFunc('test', function() use ($self)
{
//here some stuff
$data = 'hello';
$self->doSomething($data);
});
}
public function doSomething($data)
{
echo $data;
}
}
$c = new SomeClass;
$c->run();
|
<?php
/******* PHP >= 5.4 ***********/
class Other
{
public function addFunc($txt, $func)
{
$func();
}
}
class SomeClass
{
public function Run()
{
$someObj = new Other();
$someObj->addFunc('test', function()
{
//here some stuff
$data = 'hello';
$this->doSomething($data);
});
}
public function doSomething($data)
{
echo $data;
}
}
(new SomeClass)->run();
|
| |
|
|
|
|
|
|
|
для: Igorek
(09.04.2015 в 19:12)
| | Спасибо, решил так же как вы описали в первом примере.
Объясните пожалуйста почему во втором примере $this работает внутри функции?
$someObj->addFunc('test', function()
{
//here some stuff
$data = 'hello';
$this->doSomething($data);
});
|
Из-за вот этой конструкции? | |
|
|
|
|
|
|
|
для: Ученик
(20.04.2015 в 16:11)
| | >Из-за вот этой конструкции?
нет. Я специально указал версию php для каждого примера. Начиная с php 5.4 можно использовать $this в анонимных функциях, о чем указано в списке изменений в мануале: https://php.net/manual/ru/functions.anonymous.php | |
|
|
|