请教几个简单的问题
第一个问题:用 $this->load-> 这种方式调用函数很不错。我在查看源代码(\system\codeigniter\Base4.php)中发现是CI_Base类继承CI_Loader类,然后通过代码$this->load =& $this; 完成的。
我要问的是在Base5.php中没有发现CI_Base类继承其他类,难道Php5已经可以自动完成这个功能了么? ( run under PHP 5.It allows us to manage the CI super object more
gracefully than what is possible with PHP 4.)
第二个问题:
这是用对象的形式传入视图:
$data = new Someclass();
$this->load->view('blogview', $data);
这是用数组的形式传入视图:
$data = array(
'title' => 'My Title',
'heading' => 'My Heading',
'message' => 'My Message'
);
$this->load->view('blogview', $data);
用对象和数组的形式,它们有什么区别?哪种方式比较好?
另外,我比较好奇,变量 $data
在视图中“找不到”了-----即无法调用$data ,难道是采用URL参数的方式?现在我们假设上面的data类和data数组的字段相同,那么数组和对象的视图文件应该分别怎么写?
像下面这样肯定不行:(
<ul>
<?php foreach($data as $item):?>
<li><?php echo $item->title;?></li>
<?php endforeach;?>
</ul>
(刚接触php,请多指教。) 第一个问题,请沧蓝来解答。
第二个问题,数组和对象没什么差别,可能有很少的性能差别,请查看:http://codeigniter.org.cn/forums/thread-419-1-1.html
还有,你传进去以后,$data 当然没有了,CI 会自动转换成 $title,$heading,$message。 第二个问题,我记得CI是把$data数组使用一个php函数进行处理,功能是把里边每一个元素分别处理成变量
具体函数是extract(),具体请查看php手册
你在视图页面找不到$data的 所以,你想要进行一个循环,必须在$data数组里放置一个数组,相当于二维数组吧
例如:$data = array(
'blog_title' => 'My Blog Title',
'blog_heading' => 'My Blog Heading',
'blog_entries' => array(
array('title' => 'Title 1', 'body' => 'Body 1'),
array('title' => 'Title 2', 'body' => 'Body 2'),
array('title' => 'Title 3', 'body' => 'Body 3'),
array('title' => 'Title 4', 'body' => 'Body 4'),
array('title' => 'Title 5', 'body' => 'Body 5')
)
);
你在视图页面就可以这样
{blog_entries}
{title},{body}
{/blog_entries}
具体参看手册的模板解析类 关于第一个问题:可以从libraries/Controller.php的77行开始看。 我一直以为View是可以传入对象的,原来只能是数组。这是view函数:
function view($view, $vars = array(), $return = FALSE)
{
return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
}
是函数_object_to_array将对象转变数组的,没有用到函数extract()。
/**
* Object to Array
*
* Takes an object as input and converts the class variables to array key/vals
*
* @access public
* @param object
* @return array
*/
function _object_to_array($object)
{
if ( ! is_object($object))
{
return $object;
}
$array = array();
foreach (get_object_vars($object) as $key => $val)
{
// There are some built in keys we need to ignore for this conversion
if ( ! is_object($val) && ! is_array($val) && $key != '_parent_name' && $key != '_ci_scaffolding' && $key != '_ci_scaff_table')
{
$array[$key] = $val;
}
}
return $array;
} 必须以数组传到视图里,但是传入的数组中可以包含对象元素。
不知道楼主明白不明白我的意思。
页:
[1]