как расширить ArrayObject?

Духовность™

Продвинутый новичок
как расширить ArrayObject?

Хочу добиться, что бы при
PHP:
$a = new ArrayObject();
echo $a['undefined'];
вместо
Код:
Notice: Undefined index: undefined in Z:\home\test\www\index.php on line 30
возвращался бы null

Не пойму, как расширить ArrayObject::eek:ffsetGet?

написал
PHP:
$array['a']['1'] = '00001';
$array['a']['2'] = '00002';

class myArrayObject extends ArrayObject
{
    
}

$x = new myArrayObject( $array );

var_dump($x);
оказалось ArrayObject хранит данные в таком виде
PHP:
/*
object(myArrayObject)[1]
  public 'a' => 
    array
      1 => string '00001' (length=5)
      2 => string '00002' (length=5)
*/
подумал предопределить метод offsetGet так:
PHP:
class myArrayObject extends ArrayObject
{
    public function offsetGet($index)
    {
        return isset($this->$index) ? $this->$index : null;
    }
}

$x = new myArrayObject( $array );
echo $x['a']['1'];// не работает
попробовал сделать так
PHP:
$array['a']['1'] = '00001';
$array['a']['2'] = '00002';

class myArrayObject extends ArrayObject
{
    protected $data;

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

    public function offsetGet($index)
    {
        return isset($this->data[$index]) ? $this->data[$index] : null;
    }
}

$x = new myArrayObject( $array );
echo $x['a']['undefined'];
тот же
Код:
Notice: Undefined index: undefined in Z:\home\test\www\index.php on line 30
Помогите пжалуйста я заипался уже :(
 

vovanium

Новичок
Помогите пжалуйста я заипался уже
Там прикол в том что у тебя расширенным массивом считается только первый уровень (там где 'а'), а второй уровень это уже обычные массивы для которых твой метод offsetGet не запускается.
Если хочешь чтобы вложенные массивы тоже работали по-твоему, то тебе в конструкторе нужно рекурсией пройтись по всем вложенным массивам и сделать из них свой myArrayObject
 

tf

крылья рулят
а где он индексы юзает по массиву не найти?
 

С.

Продвинутый новичок
Хочу добиться, что бы при

$a = new ArrayObject();
echo $a['undefined'];

вместо

code:Notice: Undefined index: undefined in Z:\home\test\www\index.php on line 30

возвращался бы null
error_reporting(E_ALL^E_NOTICE);

KISS
 

С.

Продвинутый новичок
> error_reporting(E_ALL^E_NOTICE);

а может всеже без костылей?
Смешно! Реплика про костыли в теме про то, в какой бы невзвезденный объект захреначить массив, чтобы он работал, как массив. И эти люди запрещают мне ковыраться в носу?

Сначала они вопиют о строгой типизации, а потом хотят, чтобы неопределенная переменная возвращала им null. Ну во-первых, коль на то пошло, специально для этого есть механизм. А во-вторых, вы определитесь чего вам надо: рыбку съесть или на стульчик сесть?
 

Духовность™

Продвинутый новичок
это понятно.

я просто делаю это для view. в шаблонах очень удобно использовать тупо echo $a['undefined'] без кучи однообразных проверок на присутствие переменой.
 

С.

Продвинутый новичок
О боже!

// --<| здесь отключаешь ноутисы
view($template);
// --<| здесь включаешь обратно
 

Активист

Активист
Команда форума
triumvirat
Меня порой поражает твое стремление решить типичную задачу через ж...пу. Есть же общепринятые нормы и типичные задачи. Отключаешь E_NOTICE и все.

У меня по умолчанию - E_ALL, смарти сам отклчает нотисы, я один раз их включил :)))

PHP:
$this->errorReporting = error_reporting();
error_reporting($this->errorReportiong ^ E_NOTICE);
//some_code_hear;
//
//
//
error_reporting($this->errorReportiong & E_NOTICE);
 

Активист

Активист
Команда форума
ты представь, что твой код будет использовать другой человек, н-р, твой сотрудник, он с ума сойдет от такой типизации и идеологии.
 

AmdY

Пью пиво
Команда форума
triumvirat
нужно изменить конструктор, и в нём рекурсивно обойти входное значение, проверяешь массив ли и дальше в цикле врапишь каждый эллемент.
и не возвращай null, возвращай какой нить объект
class EmptyObject {
public function __toString() { return '';}
public function __call() {return new self();}
.......
}
а лучше даже его отнаследуй от ArrayObject
 

tf

крылья рулят
triumvirat, да найди ты методом тыка где оно гетит $a['undefined']
как вариант перепиши для всех функциях обертки
потом отладчиком найди где оно нотис кидает, та функция что перед нет - твоя искомая
Смешно! Реплика про костыли в теме про то, в какой бы невзвезденный объект захреначить массив, чтобы он работал, как массив. И эти люди запрещают мне ковыраться в носу?
это не наш метод
 
Сверху