PHP Doku:: Process a PHP file importing function and class definitions, overwriting where appropriate - function.runkit-import.html

Verlauf / Chronik / History: (4) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzDas Verhalten von PHP beeinflussenrunkitrunkit Funktionenrunkit_import

Ein Service von Reinhard Neidl - Webprogrammierung.

runkit Funktionen

<<runkit_function_rename

runkit_lint_file>>

runkit_import

(PECL runkit >= 0.7.0)

runkit_import Process a PHP file importing function and class definitions, overwriting where appropriate

Beschreibung

bool runkit_import ( string $filename [, int $flags = RUNKIT_IMPORT_CLASS_METHODS ] )

Similar to include() however any code residing outside of a function or class is simply ignored. Additionally, depending on the value of flags, any functions or classes which already exist in the currently running environment will be automatically overwritten by their new definitions.

Parameter-Liste

filename

Filename to import function and class definitions from

flags

Bitwise OR of the RUNKIT_IMPORT_* family of constants.

Rückgabewerte

Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.


6 BenutzerBeiträge:
- Beiträge aktualisieren...
dabbers
16.08.2008 1:58
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.
Maxdamantus
26.11.2007 7: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.02.2007 16: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
2.11.2006 14: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.11.2005 20: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.11.2005 19: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;
    }
  }
}
?>



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)