0

オブジェクト変数にデータを代入するときに問題が発生しました。私はずっと、そのような奇妙な行動を見たことがありません。

私はクラスを持っています:

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;
        }
    }
4

0 に答える 0