オブジェクト変数にデータを代入するときに問題が発生しました。私はずっと、そのような奇妙な行動を見たことがありません。
私はクラスを持っています:
class Main extends CI_Controller {
public $data = array();
public function __construct(){
parent::__construct();
/**
* Load Models
*/
$this->load->model('rss');
$this->load->model('model_product');
/**
* Default loaded Data
*/
$this->data['newsfeed'] = $this->rss->load($this->config->item('newsfeed'));
}
}
ニュースフィードを $this->data オブジェクトに追加したいことがわかります。これは、newsfeed という名前のキーに保持されます。しかし今、私はこのニュースフィードを別のページに載せたいと思っています。これをすべてのページにロードするのは無意味で非効率的であるため、メインコントローラーを拡張しました。
class Shop extends Main {
public function __construct(){
parent::__construct();
}
public function index()
{
$this->data['content'] = 'shop/default';
$this->load->view('template/index', $this->data);
}
public function product($id){
$this->data['product'] = $this->model_product->getProducts(null, $id);
if($this->data['product']->categoryid != $this->config->item('gamecategory')){
redirect('');
}
var_dump($this->data['product']);
$this->data['content'] = 'shop/product';
$this->load->view('template/index', $this->data);
}
}
予想される動作は、$this->data がオブジェクトの配列を (各キーに) 保持することですが、shop コントローラーで var_dump を実行すると、提供されたキーではなく、$data オブジェクト全体が戻りデータとして返されます。これは私の心を完全に吹き飛ばし、私はこの奇妙な行動を理解できないようです.
Expected var_dump ($this->data['product']):
Array(x){
key: value,
key: value,
.....
}
actual result:
Object{
newsfeed:
- data
product:
- data
....
....
}
モデルRSS:
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Rss extends CI_Model{
public function __construct(){
parent::__construct();
}
public function load($item){
return ($xml = simplexml_load_string(file_get_contents($item))) ? $xml : false;
}
}