这个问题已经在这里有一个答案:
- 调用一个成员功能的非对象上[重复] 8个答案
在CI界似乎也没有回答这个(或者它是如此明显,它看起来像一个小白的问题吗?),所以我在这里问。
我一直在现在看到的这种错误的很长一段时间(错误消息遵循),但我一直使用这种“脏”的解决方法 。 现在我不想再编辑的核心CI代码,我知道必须有一个优美的解决了这一点。
这里是设置。
在我的应用程序/配置/路由我有这个
$route['default_controller'] = "dispatcher";
在应用/控制器分派器类/被定义为这样的:
class Dispatcher extends MY_Controller {
function __construct() {
parent::__construct();
$this->load->helper(array('form','https'));
}
function index() {
# load models
$this->load->model('site/map');
$this->load->model('site/langs');
$this->load->model('site/pages');
if ( $mapped = $this->map->get_map() ){ // this is the line 21
$this->langs->set_user_lang( $this->GLO['show_lang_in_url'], $this->GLO['show_lang_at_home'] );
$red = base_url().$this->GLO['user_lang_label']."/".$mapped;
redirect($red, "refresh");
}
...
现在MY_Controller驻留在应用程序/核心并且被定义为如下:
class MY_Controller extends CI_Controller {
public function __construct() {
parent::__construct();
$this->GLO = array();
#
# set defaults:
#
$this->GLO['deb'] = '';
$this->GLO['baseurl'] = base_url();
... (more GLO[key] = value )
}
public function __set ($key, $value ) {
$this->GLO[$key] = $value;
}
我使用的每一个模型都开始像这样(据此命名):
class Map extends CI_Model {
function __construct(){
parent::__construct();
}
function get_map(){
.....
return true;
}
现在,随着CI 2.1.2,5.3.3 PHP,在Debian的Apache 2尝试加载页面时,我得到这个错误:
一个PHP错误遇到严重性:通知消息:超载财产LANGS的间接修改:: $ GLO不起作用文件名:网站/ langs.php行号:82
一个PHP错误遇到严重性:通知消息:未定义的属性:调度:: $映射文件名:控制器/ dispatcher.php行号:21
致命错误:调用一个成员函数get_map()一个非对象在/home/webdev/MC/_WWW/application/controllers/dispatcher.php第21行
线21是一个在地图模型上面注
if ( $mapped = $this->map->get_map() ){
在其他模型中的线82看起来是这样的:
$this->GLO['langs'][] = $temp;
整个代码,这GLO数组作为$引用本-GLO [ 键 ]。 必须读取和写入不时。 如果我删除MY_Controller的__set函数,我得到更多的警告。
问题出在哪儿?
非常感谢提前!