Я столкнулся со следующей проблемой в PHP версии 5.2.17, на других моих серверах (PHP 5.2.6 и PHP / 5.3.10) проблема не существует!
У меня есть простой контроллер:
function test()
{
$data = array('test' => NULL);
$this->form_validation->set_rules('test', '', 'trim|xss_clean|required');
if ($this->form_validation->run()) {
$data['test'] = $this->form_validation->set_value('test');
}
$data['result'] = array('valuebydatabase' => 'lorem');
$this->load->view('test', $data);
}
Простое представление:
<?=form_open(current_url());?>
<?php
// For debugging
echo $test;
?>
<input type="text" name="test" id="test" value="<?=set_value('test', $result['valuebydatabase']);?>">
<input type="submit" name="sbm" value="Submit" />
<?=form_close();?>
На моем Сервере с PHP 5.2.17 входное значение всегда «lorem», хотя я выкладываю другое значение, на других серверах я получаюправильное значение ...
Я думаю, что PHP инициализирует новый объект вместо использования существующего объекта.Сейчас я отлаживаю проблему на обоих серверах и нашел источник проблемы:
В form_helper.php сервер пытается получить новый экземпляр: $ CI = & get_instance ();-> Псевдоним для: CI_Controller :: get_instance ()
На одном сервере у нас есть правила, установленные в этом объекте, на других нет!
Итак, мы сейчас в основном файле:
/**
* CodeIgniter Application Controller Class
*
* This class object is the super class that every library in
* CodeIgniter will be assigned to.
*
* @package CodeIgniter
* @subpackage Libraries
* @category Libraries
* @author ExpressionEngine Dev Team
* @link http://codeigniter.com/user_guide/general/controllers.html
*/
class CI_Controller {
private static $instance;
/**
* Constructor
*/
public function __construct()
{
self::$instance =& $this;
// Assign all the class objects that were instantiated by the
// bootstrap file (CodeIgniter.php) to local class variables
// so that CI can run as one big super object.
foreach (is_loaded() as $var => $class)
{
$this->$var =& load_class($class);
}
$this->load =& load_class('Loader', 'core');
$this->load->initialize();
log_message('debug', "Controller Class Initialized");
}
public static function &get;_instance()
{
return self::$instance;
}
}
// END Controller class
/* End of file Controller.php */
/* Location: ./system/core/Controller.php */
Но я понятия не имею, почему одна версия PHP дает мне return self :: $ instance; нужный объект, а другая новый объект?