2015-10-26 2 views
0

Я завязывание сделать следующийКак передать объект функции в методе

class abc{ 

    public function abc(){ 

     someFunction(){ 
      now here I can not call bcg function like due to scope of function 
      function bcg(){ 
       $this->bcg(); 
     } 

     } 

    } 

    public function bcg(){ 
    ... 
    } 
} 

Теперь мой вопрос, как передать объект текущего класса на функцию, которая в методе класса?

ответ

2

Вы можете пройти через текущий объект в анонимную функцию/закрытия, передав его в нее в качестве аргумента:

// In an object method 
$yourFunc = function ($object){ 
    $object->bcg(); 
} 
$yourFunc($this); 

Если функция определена вне вашего класса, вы также можете использовать его в качестве решения:

function myFunction($object) { 
    $object->bcg(); 
} 

class Foo { 
    public function bgc() { 
     // ... 
    } 
    public function doSomething() { 
     myFunction($this); 
    } 
} 

Обратите внимание, что ваш bcg будет доступен из общего объема, поэтому функции protected или private не будут работать.

+1

** Неустранимая ошибка: нельзя использовать $ this как лексическую переменную **. (Я бы убрал первый), второй работает. – Jimbo

1

Вы не можете сделать функцию внутри метода класса.

Это должно работать:

class abc { 

    public function abc() { 
     $this->bcg(); // You can all bcg() here now 
    } 
    public function bcg() { 

    } 
} 
+1

На самом деле вы можете: https://3v4l.org/NBjdk – kelunik

+0

@kelunik Спасибо за информацию. Сегодня я узнал что-то новое :) –

Смежные вопросы