10/10/2018, 11:07

[CI] Rắc rối chỗ thừa kế

Ta có class system:

Code:
<?php


class system extends controller{
	function system(){
		parent::Controller();
		$this->load->model('cont_model');

	}
	
	
	function view(){
		$this->cont_model->display();
	}
	
	
}
1 class cont_model:
Code:
<?php 

class cont_model extends model{
	function cont_model(){
		parent::Model();
		$this->load->library('library');
	}
        function display(){ 
                echo 'hello';
        }
}
Trong class content:

Code:
<?php
include_once('system.php');


class content extends controller{
	function content(){
		parent::Controller();
		$this->load->model('cont_model');
	}
        function index(){
		$s = new system();
                $s->view();
	}

}
Class content và system nằm trong thư mục Controller, 'cont_model' nằm trong thư mục model.

Khi chạy thì nó báo lỗi thế này:

Code:
Fatal error: Call to a member function get() on a non-object in E:phpsuperbargainsystemapplicationcontrollerssystem.php
Cho em hỏi cách xử lí và sai ở chỗ nào.

Cảm ơn các bạn nhìu
mr.mabu viết 13:20 ngày 10/10/2018
bạn đã up hết source lên chưa,cái lỗi này là do ta thiếu dấu ()
à mà dùng Ci 1.7 hay 2.0
2.0 nó xài hàm __contruct mà
sao mấy bác bây giờ vẫn xài cái hàm khởi tạo đặt tên giống class của php4?
1024KB viết 13:10 ngày 10/10/2018
Thử.
Code:
<?php
include_once('system.php');


class content extends system{
	function content(){
		parent::Controller();

		//$this->load->model('cont_model');//ko cần gọi vì system load model rồi
	}
        function index(){
		//$s = new system();
                //$s->view();
                $this->view();
	}

}
saimoto viết 13:08 ngày 10/10/2018
Thanks bạn 1024KB, cho mình hỏi chút nữa. Giả sử ta có 2 class A và B, trong class ta mún dùng các hàm và phương thức của A, B thì phải làm sao. Vì mỗi lần thừa kế thì C chỉ được thừa kế 1 trong A hoặc B thôi. Mình thấy cách là trong C tạo ra instance của A và B, nhưng như vậy ko thể load các hàm của model trong A và B được (như cái đoạn code của em ý).

Bạn có thể giúp mình được ko, tại mình hơi mù chỗ này. Thanks bạn
1024KB viết 13:09 ngày 10/10/2018
có thể thử theo cách:
Code:
//class a
class A extends Controller {
   function A (){
      parent:: Controller();
      $this->load->model('a_model');
   }
   function fn_of_a(){
      //do something...
   }
}

//class b
require_once 'a.php';

class B extends A {
   function B(){
      $this->load->model('b_model');
   }
   function fn_of_b(){
    //do something 2
   }
}

//class C
require_once 'B.php';

class C extends B{
   function C(){
      $this->load->model('c_model');
   }
   function fn_of_c(){
      $this->fn_of_a();
      $this->fn_of_b();
   }
}
class
nnquangit viết 13:20 ngày 10/10/2018
CI / kohana / zend /... đi theo mô hình MVC core mỗi lần load chỉ được load 1 instances mấy cái này giải quyết cách call wa controller khác bằng cách curl nhưng nó chỉ trả về html / ... nói chung là text ko trả về được được object như array / ...

Nếu bạn bắt đầu học CI thì nên tìm hiểu HMVC của CI.
Bài liên quan
0