Передача параметров в библиотеку __construct в Codeigniter

Я действительно новичок в Codeigniter и просто учусь с нуля. проверил документацию по Creating Libraries но безуспешно на моем примере:

Мне нужно передать значение __construct библиотека.

класс: библиотеки / Myclasses / Bird

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Bird{
public $fly;
public $goodsound;

public function __construct($fly, $goodsound) {
$fly = $this->fly;
$goodsound = $this->goodsound;
}
public function sentance(){
return "This Bird can ".$this->fly . " and has ". $this->goodsound;
}
}

класс: библиотеки / Mybird

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
require_once(APPPATH.'libraries/Myclasses/Bird.php');

class Mybird extends Bird {
public function __construct() {
}
}

контроллер: птицы

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Birds extends CI_Controller {
public function __construct(){
parent::__construct();
$config = array('fly' => 'fly', 'goodsound' => 'very good');
$this->load->library('Mybird', $config);
}

public function index(){
$mybird = new mybird();
echo $mybird->sentance();
}
}

Я думаю, что проблема в классе Mybird, который не передает значения, но я не могу понять, как с этим справиться.

0

Решение

Одна проблема в конструкторе для Bird, Попробуй это.

class Bird{
public $fly;
public $goodsound;

public function __construct($fly, $goodsound)
{
$this->fly = $fly;
$this->goodsound = $goodsound;
}

Без $this-> перед именем свойства вы создаете локальные переменные, которые выйдут из области видимости после завершения конструктора.

Во-вторых, любой класс, расширяющий Bird, должен передать два аргумента конструктору базового класса. Например:

class Mybird extends Bird {
public function __construct()
{
parent::__construct('Fly', 'very good');
}
}

Вы могли бы определить Mybird принимать аргументы тоже, а затем передавать их родительской конструкции :: __

class Mybird extends Bird {
public function __construct($fly, $goodsound)
{
parent::__construct($fly, $goodsound);
}
}

Там нет необходимости для new позвонить в контроллер — $this->load->library('Mybird', $config); сделал это для вас уже.

index() должно работать нормально, как показано ниже. Обратите внимание, что Mybird является свойством контроллера и поэтому должен быть доступен с помощью $this,

 public function index(){
echo $this->Mybird->sentance();
}

Однако, если вы хотите передать $config массив в качестве аргумента при загрузке библиотеки, то вам нужно пересмотреть как Bird и Mybird классы как то так.

class Bird
{
public $fly;
public $goodsound;

public function __construct($config)
{
$this->fly = $config['fly'];
$this->goodsound = $config['goodsound'];
}

}class Mybird extends Bird
{
public function __construct($config)
{
parent::__construct($config);
}

}
1

Другие решения

Ваша библиотека Mybird также необходимо установить в параметры кроме ее конструктора, когда библиотека вызывается из контроллера Bird с $this->load->library('Mybird', $config);

при расширении библиотеки вам нужно придерживаться того, что установлено в вашем config.php, что-то вроде $config['subclass_prefix'] = 'MY_'; потребует MY_Bird вместо Mybird

больше информации по теме Вот а также Вот

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector