It appears that this function still doesn't remove the previous class. I'm not sure what it does to it, but looking at memory usage, it only goes up instead of staying the same or going down (This was when I reloaded a class that was exactly the same).
So that might be something to fix, unless I'm doing something wrong.
runkit_import
(PECL runkit >= 0.7.0)
runkit_import — Traite un fichier PHP important fonctions et définitions de classes, écrasement où applicable
Description
bool runkit_import
( string $filename
[, int $flags= RUNKIT_IMPORT_CLASS_METHODS
] )
Similaire à include(), par contre tout code qui réside à l'extérieur de fonction ou classe est simplement ignoré. De plus, dépendamment de la valeur de flags , toutes fonctions et classes qui existent déjà dans l'environnement en cours d'exécution seront automatiquement écrasées par leurs nouvelles définitions.
Liste de paramètres
- filename
-
Nom du fichier pour importer les définitions de fonctions et de classe
- flags
-
Comparaison de bits OU (OR) de la famille de constantes RUNKIT_IMPORT_*.
Valeurs de retour
Cette fonction retourne TRUE en cas de succès, FALSE en cas d'échec.
runkit_import
dabbers
15-Aug-2008 11:58
15-Aug-2008 11:58
Maxdamantus
26-Nov-2007 06:35
26-Nov-2007 06:35
In reply to the comment made by info at lucasvd dot nl:
Runkit WILL reload classes, but the runkit_import must be called from inside an other class or object to do so.
<?php
class reload{
function __construct($file){
runkit_import($file);
}
}
new reload("myclassfile.php");
?>
info at lucasvd dot nl
13-Feb-2007 03:13
13-Feb-2007 03:13
Note that reloading classes does not work, when you're using this extension on the PHP Command Line Interface.
php at ransico dot com
02-Nov-2006 01:17
02-Nov-2006 01:17
When using this function to override an existing class, you need to be careful in cases where the new definition 'extends' another class - it won't work.
For example,
<?php
// File 1
class BaseCls { }
class TestCls extends BaseCls {
function hi () { echo "Hi"; }
}
runkit_import('test2.php');
?>
<?php
// File 2
class TestCls extends BaseCls {
function hi () { echo "Hi again!"; }
}
?>
will NOT work. In file two, you need to omit the 'extends BaseCls'. Note however, that anything from BaseCls will still be in TestCls since it was defined originally in file 1.
From what I can tell, runkit_import defines and overwrites elements - however it does not delete.
bbisgod [at] gmail [dot] com
29-Nov-2005 07:19
29-Nov-2005 07:19
I was experiencing problems using this function on a script. I discovered through trial and error that you CANNOT reload a function (or method of a class) if it has been called (e.g, its present in the debug_backtrace). Also you cannot redeclare a function that is used by set_error_handler.
The reasons are logical, but it took me a good 2 days of debugging to find it, hope this saves someone a headache.
bbisgod [at] gmail [dot] com
29-Nov-2005 06:27
29-Nov-2005 06:27
Heres a nice function to reload the whole program, note, requires PHP5.1:
<?php
function reload() {
$files = get_included_files();
foreach($files as $file) {
if (runkit_lint_file($file)) {
runkit_import($file);
} else {
return false;
}
}
}
?>
