public function __call($method, $arguments)
 {
     // 自動的に引数位置を変更するメソッド
     if (!$this->arg_push && in_array($method, self::$auto_push_method)) {
         $this->p();
     }
     // 値が空の場合
     if (empty($this->value)) {
         return $this;
     }
     // 値がスカラー値の場合でも動くように
     if (is_scalar($this->value)) {
         $arg = $arguments;
         if ($this->arg_push) {
             $arg[] = $this->value;
         } else {
             array_unshift($arg, $this->value);
         }
         $this->value = call_user_func_array($method, $arg);
         $this->arg_push = false;
         $this->is_call = false;
         return $this;
     }
     // 再帰を含めた要素処理
     foreach ($this->value as $k => $v) {
         $arg = $arguments;
         if (is_array($v)) {
             $arr = new ArrayMap($v);
             if ($this->arg_push) {
                 $arr->p();
             }
             if ($this->is_call) {
                 array_unshift($arg, $method);
                 call_user_func_array(array($arr, 'call'), $arg);
             } else {
                 call_user_func_array(array($arr, $method), $arguments);
             }
             $this->value[$k] = $arr->v();
             continue;
         }
         if ($this->arg_push) {
             $arg[] = $v;
         } else {
             array_unshift($arg, $v);
         }
         $this->value[$k] = call_user_func_array($method, $arg);
     }
     $this->arg_push = false;
     $this->is_call = false;
     return $this;
 }