PHP: Pass anonymous function as argument

Можно ли передать анонимную функцию в качестве аргумента и заставить ее выполняться немедленно, таким образом передавая значение функции return ?

function myFunction(Array $data){
    print_r($data);
}

myFunction(function(){
    $data = array(
        'fruit'     => 'apple',
        'vegetable' => 'broccoli',
        'other'     => 'canned soup');
    return $data;
});

Это вызывает ошибку из-за ] Подсказка типа Array , жалоба на переданный объект. Хорошо, если я удалю подсказку типа, она, конечно же, выдаст Closure Object , а не результаты, которые мне нужны. Я понимаю, что технически я передаю экземпляр объекта Closure в myFunction , однако я почти уверен, что видел это в другом месте. Это возможно? Если да, то что я делаю не так?

Ради этого обсуждения я не могу изменить функцию, которой я передаю закрытие.

tl; dr: Как я могу передать объявление анонимной функции как аргумент открытый класс MessageHeader {частный гид? messageId; public Guid MessageId {get {if (messageId == null) ...

У меня есть следующая модель:

[DataContract]
public class MessageHeader
{
    private Guid? messageId;

    public Guid MessageId
    {
        get
        {
            if (messageId == null)
                messageId = Guid.NewGuid();

            return messageId.Value;
        }
    }

    [DataMember]
    public string ObjectName { get; set; }

    [DataMember]
    public Dictionary Parameters { get; set; } // Can't deserialize this

    [DataMember]
    public Action Action { get; set; }

    [DataMember]
    public User InitiatingUser { get; set; }
}

Теперь по неизвестной причине DataContractJsonSerializer не может десериализовать JSON в словарь ( См. Раздел дополнительных сведений).
К сожалению, DataContractJsonSerializer также закрыт по причинам, не зависящим от меня.
Мне нужен способ обойти это, есть ли у кого-нибудь подсказка?

5
задан the_drow 16 November 2010 в 21:46
поделиться