2012-09-01 3 views
0

Как удалить существующие массивы (см. Код ниже) ?, Я знаю, что CodeIgniter - хорошая структура, но я хочу понять, как CI управляет их методом $ this-> data.PHP удалить существующий массив

Мой код:

<?php 
class simple { 

    public $data; 

    public function set($key, $value) 
    { 
     $this->data[$key] = $value; 
    } 
} 

class testa extends simple { 

    function yoop() 
    { 
     $this->set('name', 'excelent'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 

    function noop() 
    { 
     $this->set('level', 'normal'); 
     $this->set('power', 'high'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 
} 

$testa = new testa; 
$testa->yoop(); 
$testa->noop(); 

/* EOF */ 

Текущие результаты:

Array 
(
    [name] => excelent 
) 
Array 
(
    [name] => excelent 
    [level] => normal 
    [power] => high 
) 

Я хочу, чтобы удалить существующий массив, и конечный результат я хочу:

Array 
(
    [name] => excelent 
) 
Array 
(
    [level] => normal 
    [power] => high 
) 

ответ

0
$testa = new testa; 
$testa->yoop(); 

$testa1 = new testa; 
$testa1->noop(); 
+1

спасибо, но я думаю, что если я создам новый класс, память процессора будет исчерпана, любые другие решения? – oknoorap

0

вы не можете этого сделать,

Вы пытаетесь получить доступ к тому же массиву, но ожидаете разные результаты? , если вы действительно хотите сделать это (не знаю почему), вы можете установить массив снова, или может использовать два экземпляра

просто

<?php 
class simple { 

    public $data; 

    public function set($key, $value) 
    { 
     $this->data[$key] = $value; 
    } 

    public function reset(){ 
     this->data = array(); 
    } 
} 

class testa extends simple { 

    function yoop() 
    { 
     $this->reset(); 
     $this->set('name', 'excelent'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 

    function noop() 
    { 
     $this->reset(); 
     $this->set('level', 'normal'); 
     $this->set('power', 'high'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 
} 

$testa = new testa; 
$testa->yoop(); 
$testa->noop(); 

/* EOF */ 
+0

Да, ваше решение имеет смысл до сих пор и не исчерпывает память, спасибо .. – oknoorap

+0

@oknoorap: Это создает новый массив каждый раз - как это отличается от ответа @ Ashwini, который каждый раз создает новый 'class'? В обоих случаях предыдущий экземпляр будет собирать мусор. – Eric

+1

если вы печатаете_r или var_dump $ testa, ваша память снова создаст новый экземпляр. – oknoorap

2

Я не очень понимаю, что вы стремитесь Вот. Почему бы не просто:

class testa { 
    public $data; 

    function yoop() 
    { 
     $this->data = array('name' => 'excellent'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 

    function noop() 
    { 
     $this->data = array(
      'level' => 'normal', 
      'power' => 'high' 
    ); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 
} 
+0

если я это делаю, я считаю, что это не фреймворк, а тратить время, если вы пишете 10000 строк кода ... – oknoorap

+0

:) но я думаю, ваш ответ тоже имеет смысл ... – oknoorap

+3

«Я считаю, что это не фреймворк» - я понятия не имею, что вы пытаетесь сказать. Похоже, вы используете фреймворк как модное слово. – Eric

0

Попробуйте создать еще одну функцию к вашему testa класс:

function qoop(){ 
    unset($this->data['name']); // this function remove $data key by 'name' 
    $this->set('level', 'normal'); 
    $this->set('power', 'high'); 
    echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
} 

результат будет:

Array 
(
    [name] => excelent 
) 
Array 
(
    [level] => normal 
    [power] => high 
) 

сырой код:

<?php 
class simple { 

    public $data; 

    public function set($key, $value) 
    { 
     $this->data[$key] = $value; 
    } 
} 

class testa extends simple { 

    function yoop() 
    { 
     $this->set('name', 'excelent'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 

    function noop() 
    { 
     $this->set('level', 'normal'); 
     $this->set('power', 'high'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 

    function qoop() 
    { 
     unset($this->data['name']); // this function remove $data key by 'name' 
     $this->set('level', 'normal'); 
     $this->set('power', 'high'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 

} 

$testa = new testa; 
$testa->yoop(); 
$testa->qoop(); 

/* EOF */ 
Смежные вопросы