Closures serialization

From: Date: Fri, 02 Jan 2009 19:56:41 +0000
Subject: Closures serialization
Groups: php.internals 
Request: Send a blank email to internals+get-42452@lists.php.net to get a copy of this message
Hello internals and a happy new year. I've been meaning to ask this for some time now: why aren't closures serializable? The only on-list discussion about this that i've found is: http://marc.info/?l=php-internals&m=119837318407795&w=2 Personally i'd find serialization of closures very useful (think serializing of callback arrays, serialization of objects that acquired closure somewhere during execution, etc) Also i find that being unable to serialize closure introduces a slight inconsistency. It was possible to serialize "is callable" type (plain array/string) whereas now it's not always the case[1] so programmers have to be aware of it when using some kind of "register callback" behavior. So to my question: why aren't closures serializable? Is it a design choice or implementation issue? I've looked at both zend_closure.c (for closure implementation) and var.c (for serialization) but didn't see anything that could suggest either way. Now for some wild guessing: In the internals post mentioned above it's stated that annonymous function name is along the lines of hashfunction(__FILE__) and per_file_counter; i understand that it's deterministic, and so if i were to serialize just this id (as sting) it should be possible to track back to the actual code after deserialization? i imagine that it would require (in simple terms) getting the original file and "executing/assigning" n-th per_file closure. It should be even simpler when done in the same request and/or with opcode caches where just the id should be sufficient to get the original opcodes and execute. I'll look some more into it myself but i'm not that fluent in C to provide quality patch (not to mention zend api). I'd like to know your opinion whether this could be implemented though. TIA Marcin Kurzyna [1] While it was possible to serialize an array of callbacks before it's impossible with closures assigned, see example below: http://aquarion.hq.crystalpoint.pl/public/php-internals/closure-serialization.php

« previous php.internals (#42452) next »