10-04-2009, 11:09 PM
(Modification du message : 12-04-2009, 12:12 AM par jo_link_noir.)
Bonjour
Pour ce qui connaisse pas, ArrayAccess est une classe d'interface de php5. Elle permet d'accéder à un objet comme si s'était un tableau.
Le problème c'est qu'à partir du moment ou je le fait sur un tableau à plus d'une dimension, patatras, j'obtient ce magnifique message :
Donc bon voilà, juste pour savoir si vous aviez pas mieux ?
Bonne soirée.
Pour ce qui connaisse pas, ArrayAccess est une classe d'interface de php5. Elle permet d'accéder à un objet comme si s'était un tableau.
Le problème c'est qu'à partir du moment ou je le fait sur un tableau à plus d'une dimension, patatras, j'obtient ce magnifique message :
Citation :Indirect modification of overloaded element of MyArray has no effectPas super cool :/. Après une 1h à faire bidouille et autre j'ai fini par avoir le fonctionnement voulu, mais j'aime pas trop. Regardez offsetGet et surtout le constructeur, je trouve ça louche mais ça marche bien...
Donc bon voilà, juste pour savoir si vous aviez pas mieux ?
Bonne soirée.
Code PHP :
<?php
class MyArray implements ArrayAccess
{
public $array;
function __construct($a=array())
{
$this->array = &$a;
}
// Retourne une valeur contenue dans le tableau
public function offsetGet($offset)
{
if (isset($this->array[$offset]))
if (is_array($this->array[$offset]))
return new MyArray(&$this->array[$offset]);
else
return $this->array[$offset];
$this->array[$offset] = array();
return new MyArray(&$this->array[$offset]);
}
// Méthode d'ajout d'une valeur dans le tableau
function offsetSet($offset, $value)
{
$this->array[$offset] = $value;
return $this;
}
// Supprime une valeur du tableau
public function offsetUnset($offset)
{
unset($this->array[$offset]);
}
// Test si une valeur existe dans le tableau
public function offsetExists($offset)
{
return isset($this->array[$offset]);
}
}
$myArray = new MyArray;
$myArray[2] = 10;
$myArray[3][1][0] = 12;
$myArray2 = new MyArray(array(0=>'valeur qui va être effacer', 1=>'plop'));
$myArray2[0] = 10;
$myArray2[3] = 12;
echo $myArray[3][1][0]."\n";
var_dump($myArray->array, $myArray2->array);