protected function run($call)
    {
        if (!isset($call['callable'])) {
            throw new OperationStateException("\$call['callable'] was not set");
        }
        
        if (!isset($call['arguments'])) {
            try {
                is_null($call['arguments']);
            } catch (\Exception $e) {
                throw new OperationStateException("\$call['arguments'] was not set");
            }
        }
        
        if (is_callable($call['callable'])) {
            if ($call['arguments'] == self::NO_ARGUMENT) {
                return call_user_func($call['callable']);
            } else {
                return call_user_func_array($call['callable'], $call['arguments']);
            }
        } else {
            throw new OperationStateException("\$call and \$arguments passed did not pass is_callable() check");
        }
    }
protected function run($call)
    {
        if (!isset($call['callable'])) {
            throw new OperationStateException("\$call['callable'] was not set");
        }
        
        if (!isset($call['arguments'])) {
            try {
                is_null($call['arguments']);
            } catch (\Exception $e) {
                throw new OperationStateException("\$call['arguments'] was not set");
            }
        }
        
        if (is_callable($call['callable'])) {
            if ($call['arguments'] == self::NO_ARGUMENT) {
                return call_user_func($call['callable']);
            } else {
                return call_user_func_array($call['callable'], $call['arguments']);
            }
        } else {
            throw new OperationStateException("\$call and \$arguments passed did not pass is_callable() check");
        }
    }
protected function run ( $ call ) { if ( ! isset ( $ call [ 'callable' ] ) ) { throw new OperationStateException ( "\$call['callable'] was not set" ) ; } if ( ! isset ( $ call [ 'arguments' ] ) ) { try { is_null ( $ call [ 'arguments' ] ) ; } catch ( \ Exception $ e ) { throw new OperationStateException ( "\$call['arguments'] was not set" ) ; } } if ( is_callable ( $ call [ 'callable' ] ) ) { if ( $ call [ 'arguments' ] == self :: NO_ARGUMENT ) { return call_user_func ( $ call [ 'callable' ] ) ; } else { return call_user_func_array ( $ call [ 'callable' ] , $ call [ 'arguments' ] ) ; } } else { throw new OperationStateException ( "\$call and \$arguments passed did not pass is_callable() check" ) ; } }
This will run the action passed, whether execute or undo.

@param array $call Contains 'callable' index supporting is_callable and 'arguments' (NULL or args).
You can also pass OperationState::NO_ARGUMENT as an argument to call with no argument
@throws \RuntimeException
@return mixed returns the result of the method call
This will run the action passed whether execute or undo .