Я действительно новичок в 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, который не передает значения, но я не могу понять, как с этим справиться.
Одна проблема в конструкторе для 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);
}
}
Ваша библиотека Mybird
также необходимо установить в параметры кроме ее конструктора, когда библиотека вызывается из контроллера Bird
с $this->load->library('Mybird', $config);
при расширении библиотеки вам нужно придерживаться того, что установлено в вашем config.php, что-то вроде $config['subclass_prefix'] = 'MY_';
потребует MY_Bird вместо Mybird