Re: unload/reload classes?
| From: | Robert Hickman | Date: | Mon, 18 Mar 2019 23:45:35 +0000 |
| Subject: | Re: unload/reload classes? | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-104791@lists.php.net to get a copy of this message | ||
(I'm not a internals developer, but here are some ideas:)
1: I have seen an extension which allows functions/classes to be
redefined, although I can't remember what it is called.
2: It is possible to dynamically reload code if defined as anonymous
classes or functions using return include:
<file_1.php>
<?php
return class {
function some_function($a, $b) {
return $a + $b;
}
};
<file_2.php>
$class = include "file_1.php";
$class->some_function(1,2);
----------------
This would entail creating a custom namespace system, and a facility
to watch and re-include files. I don't know if the old bytecode of
'orphaned' objects would be garbage collected.
3: Another option would be to create a watcher on the files and just
kill and reload the php process on file changes. This would be easier
if the application state is all stored externally.
4: Use Ruby/JS/Python instead?
On Mon, 18 Mar 2019 at 20:16, Rasmus Schultz <rasmus@mindplay.dk> wrote:
>
> Hello internals,
>
> How hard would be to add an unload (or reload) feature for
> classes/interfaces?
>
> I'm wondering with regards to running PHP as a deamon (with Swoole or
> ReactPHP, etc.) could it be made possible to hot-reload e.g. for
> controllers and view-models?
>
> Of course, the other option is to launch worker sub-processes under some
> sort of host process, and then restart the workers after a change - this
> adds communication overhead between the host/worker processes though, and a
> layer of complexity.
>
> Another option is if a reverse proxy (NGINX maybe) could restart the actual
> application daemon, but that means you have a dependency on a specific
> reverse proxy.
>
> So I know there are other options, but I'm looking for the simplest and
> cleanest way to do this, and I'd prefer to stay within the language.
>
> Other dynamic languages (where daemonizing is "normal", like Ruby, JS and
> Python) have this feature and it is often used to hot-reload
> controllers/views in web-apps.
>
> Any thoughts?