Codeigniter записывает цепные функции

#codeigniter

#codeigniter

Вопрос:

Могу ли я писать цепные функции в CodeIgniter?

Итак, если у меня есть такие функции, как эти :

 function generate_error(){
    return $data['result']      =   array('code'=> '0',
                                      'message'=> 'error brother');
}

function display_error(){
      $a= '<pre>';
      $a.= print_r($data);
      $a.= '</pre>';
      return $a;
}
  

Я хочу вызывать их, связывая в цепочку :

 echo $this->generate_error()->display_error();
  

Причина, по которой я хочу разделить эти функции, заключается в том, что display_error () полезен только для разработки, поэтому, когда дело доходит до производства, я могу просто удалить display_error () или что-то в этом роде.

Спасибо!

Ответ №1:

Для записи цепных функций они должны быть частью класса, из функции вы затем возвращаете ссылку на текущий класс (обычно $this ). Если вы вернете что-либо, кроме ссылки на класс, произойдет сбой.

Также возможно возвращать ссылку на другой класс (например, когда вы используете get() функцию code igniter active records class, она возвращает ссылку на DBresult класс)

 class example {

  private $first = 0;
  private $second = 0;

  public function first($first = null){
    $this->first = $first;
    return $this;
  }

  public function second($second = null){
    $this->second = $second;
    return $this;
  }

  public function add(){
    return $this->first   $this->second;
  }
}

$example = new example();

//echo's 15
echo $example->first(5)->second(10)->add();

//will FAIL
echo $example->first(5)->add()->second(10);
  

Ответ №2:

вы должны вернуть $this в свою функцию, чтобы создавать цепочечные функции в php ооп

 
public function example()
{ 
 // your function content
 return $this;
}