Luk*_*ann 2 php oop codeigniter
我的codeigniter库有问题.要将数据库数据转换为导航并具有活动元素,例如我构建了一个库类CI_Navigation().它工作得很好,我只有一个问题.
通常在网页上,人们具有相应但分离的导航,例如顶部的主导航和侧面的导航.为了解决这个问题,我可以用一个参数初始化我的类,告诉它该导航要保持哪个级别.我会做这样的事情.
$this->load->library('Navigation');
$main = $this->navigation->build( array('levels'=>array(0)) );
$sub = $this->navigation->build( array('levels'=>array(1,2)) );
Run Code Online (Sandbox Code Playgroud)
正如您所料,它不起作用,因为类中的数据保持了第一次调用构建时分配的方式.
令人遗憾的是CodeIgniter库中有单例(对吗?这就是我所读的).所以我不能将它初始化两次,如:
$this->load->library('Navigation','','main');
$this->load->library('Navigation','',sub);
Run Code Online (Sandbox Code Playgroud)
你知道我怎么能克服这个问题吗?
如果我将数组用于类中使用的变量,它应该工作吗?例如,对于选项而不是使用$ this->选项,我必须动态创建$ this - > $ option [0],$ this - > $ option [1].
这有用吗?我现在无法测试它,但今晚会这样做.但这不是一种非常优雅的方式,那么有更好的方法来解决这个问题吗?有什么方法可以多次初始化库吗?
先谢谢你们.
如果你想坚持严格的CI库实现,那么我建议你让你的类参数成为一组配置; 然后指定要在"构建"功能中使用的配置.
$options = array
(
'main' => array('level' => 0),
'sub' =>array('level' => 1)
);
$this->load->library('navigation', $options);
$main_nav = $this->navigation->build('main');
$sub_nav = $this->navigation->build('sub');
Run Code Online (Sandbox Code Playgroud)
但是我常常为这类事情恢复标准对象:
$a_navigator = new Navigation($options_a);
$b_navigator = new Navigation($options_b);
$a_tree = $a_navigator->build();
$b_tree = $b_navigator->build();
unset($a_navigator);
unset($b_navigator);
Run Code Online (Sandbox Code Playgroud)