Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 30.01.2018 15:16:53

Вопрос по php

Здравствуйте.
У меня есть класс в котором метод принимает callable.
Вот пример.

PHP
class Button
{
   protected 
$data = [];

   public function 
build($method)
   {
       if(
is_callable($method)) {
           
$method();
       }

       if(
is_array($method)) {
            
$this->data['buttons'] = $method;
        }
   }

    public function 
addButton(array $button = [])
    {
        
$this->data['buttons'] = $button;

        return 
$this;
    }
}

Я хочу сделать возможность добавлять кнопку массивом, или использовать колбек. Примерно так:

PHP
    // при помощи колбека
    
public function index()
    {
        
$this->button->build(function ($button) {// Как сделать что бы параметр $button былл экземпляром класса Button?
            
$button->addButton(['a' => 'b']);
        });
    }

   
// массивом
    
public function index()
    {
        
$this->button->build(['a' => 'b']);
    }

Сам вопрос, как сделать что бы параметер в колбеке был экземпляром класса Button?

Не в сети

#2 30.01.2018 20:28:56

skiphog
Откуда: Киров, Россия
Сообщений: 26

Re: Вопрос по php

Можно в метод, в качестве аргумента передать объект Button, т.е. самого себя.

PHP
// ...
public function build($method)
{
    if(
is_callable($method)) {
        
$method($this);
    }
// ...

Не в сети

#3 31.01.2018 17:29:14

Re: Вопрос по php

  1. Можно в метод, в качестве аргумента передать объект Button, т.е. самого себя

Спасибо за ответ.
Так он выводит ошибку что метод addButton не найден в вызываемом контроллере. PHP думает что этот this, это контроллер

Не в сети

#4 31.01.2018 18:22:35

skiphog
Откуда: Киров, Россия
Сообщений: 26

Re: Вопрос по php

Не знаю, почему у вас не получается.
Этот же код, только с передачей this.
Тест

Не в сети

Подвал раздела