Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Передать текущий объект в функцию
 
 автор: Ученик   (08.04.2015 в 18:27)   письмо автору
 
 

Как можно передать в функцию текущий объект, чтобы потом внутри можно было вызвать метод этого объекта

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

  Ответить  
 
 автор: Igorek   (09.04.2015 в 19:12)   письмо автору
 
   для: Ученик   (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();

  Ответить  
 
 автор: Ученик   (20.04.2015 в 16:11)   письмо автору
 
   для: Igorek   (09.04.2015 в 19:12)
 

Спасибо, решил так же как вы описали в первом примере.
Объясните пожалуйста почему во втором примере $this работает внутри функции?
$someObj->addFunc('test', function() 
  {  
     //here some stuff  
     $data = 'hello';  
     $this->doSomething($data);  
  }); 


Из-за вот этой конструкции?
(new SomeClass)->run(); 

  Ответить  
 
 автор: Igorek   (20.04.2015 в 20:39)   письмо автору
 
   для: Ученик   (20.04.2015 в 16:11)
 

>Из-за вот этой конструкции?
нет. Я специально указал версию php для каждого примера. Начиная с php 5.4 можно использовать $this в анонимных функциях, о чем указано в списке изменений в мануале: https://php.net/manual/ru/functions.anonymous.php

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования