这可能不是我问题的最佳解决方案,但无论如何我都有兴趣知道。
是否可以将一个函数或一段代码推迟到while循环结束之后?如果把它放在下面,我认为无论如何都会发生这种情况,但事实似乎并非如此。
我想要完成的是在while循环中保存一些会话数据(如果它不存在,这是条件)。当循环最终结束时,由于会话数据已设置,因此可以执行依赖于会话数据的代码。
这是在CodeIgniter 3.0系统中,所以它使用会话驱动程序:
// Uses a helper function session_isset (see below) to check if the session data is set, and if at least one of the supplied data variables is null then try to set it
while(!session_isset(array('instance_id','instance_prefix'))) {
$this->session->set_userdata('instance_id', $instance->instance_id);
$this->session->set_userdata('instance_prefix', $instance->instance_prefix);
}
// The get_managers() function, which ultimately calls a model function, relies on the set session data to get a table prefix which is prepended to all relevant database queries
// This should ideally only be allowed to run once the session data has been confirmed as set
if($manager = $this->manager->get_managers(array($manager_id))[0]) {
$manager->instance_id = $instance->instance_id;
$manager->instance_prefix = $instance->instance_prefix;
echo json_encode($manager);
}
function session_isset($data) {
$ci =& get_instance();
foreach ($data as $value) {
if(is_null($ci->session->userdata($value))) return FALSE;
}
return TRUE;
}
所以重申一下,有没有办法推迟代码直到while循环结束,类似于回调?
另外,在运行依赖它的函数之前,是否有更好的方法可以确保会话数据的设置?