用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2680|回复: 4
收起左侧

这是什么原因啊?

[复制链接]
发表于 2009-5-29 16:59:36 | 显示全部楼层 |阅读模式
本帖最后由 sunsongxp 于 2009-5-29 17:01 编辑

我自己写了个Helper:load_data_helper.php
,内容如下

$CI =&get_instance();
function hp_load_view_data()
{
global $CI;
$data = array('agreements');
$data['website_name'] = $CI->lang->line('website_name');
$data['copyright'] = $CI->lang->line('copyright');
return $data;
}

这个代码本身没有问题,但是不能够在类的构造函数中引用,比如
class main extends Controller {
var $viewdata;
function main()
{
  parent::Controller();
  $this->viewdata = hp_load_view_data();
}

function index()
{

}
}
这样就会报错
Fatal error: Call to a member function line() on a non-object inC:\PHP\DedeAMPZ\WebRoot\Default\CodeIgniter_1.7.0\system\application\helpers\load_data_helper.php
on line
10

但是如果把“$this->viewdata = hp_load_view_data();
”放到index()中,就正常了……
不知道什么原因,有谁能解释下
发表于 2009-5-29 17:49:11 | 显示全部楼层
不能在构造函数中外部引用即将构造的object,此时object不存在
 楼主| 发表于 2009-5-30 12:06:40 | 显示全部楼层
哦,原来如此,这是PHP的面向对象的特点吗
发表于 2009-5-31 10:43:23 | 显示全部楼层
什么语言的对象都要在存在以后才能引用,这个和 PHP 关系不大。
发表于 2009-5-31 17:22:10 | 显示全部楼层
new 出来后,才有东西嘛

本版积分规则