PHP Doku:: Convert a base class to an inherited class, add ancestral methods when appropriate - function.runkit-class-adopt.html

Verlauf / Chronik / History: (1) anzeigen

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

Ein Service von Reinhard Neidl - Webprogrammierung.

runkit Funktionen

<<Runkit_Sandbox_Parent

runkit_class_emancipate>>

runkit_class_adopt

(PECL runkit >= 0.7.0)

runkit_class_adopt Convert a base class to an inherited class, add ancestral methods when appropriate

Beschreibung

bool runkit_class_adopt ( string $classname , string $parentname )

Parameter-Liste

classname

Name of class to be adopted

parentname

Parent class which child class is extending

Rückgabewerte

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

Beispiele

Beispiel #1 A runkit_class_adopt() example

<?php
class myParent {
  function 
parentFunc() {
    echo 
"Parent Function Output\n";
  }
}

class 
myChild {
}

runkit_class_adopt('myChild','myParent');
myChild::parentFunc();
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Parent Function Output

Siehe auch


Ein BenutzerBeitrag:
- Beiträge aktualisieren...
muramas at cyberdiscordia dot org
3.09.2005 0:09
Function visibility (in PHP5) has some quirks as compared to the normal behavior with "extends".  Consider the following:

<?php
   
class base {
        public function
a() { $this->b(); }
        private function
b() { echo "This is b()"; }
    }
?>

This will work fine:
<?php
   
class inherit extends base {
        public function
c() { $this->a(); }
    }

   
$x = new inherit;
   
$x->c();
?>

while this:
<?php
   
class adopt {
        public function
c() { $this->a(); }
    }
   
runkit_class_adopt('adopt','base');
   
$x = new adopt;
   
$x->c();
?>

will generate a fatal "Call to private method base::b() from context 'adopt'" error.  Protected members can be called from the inherited methods, but still cannot be called from the original class (i.e. if b() were declared protected, the example would work as written, but adopt::c() still could not call base::b() directly.

Functions such as is_subclass_of(), is_a(), and the instanceof operator also do not detect the new lineage of the object; if you are using this function to simulate multiple or dynamic inheritance, you may need to implement your own method of determining class lineage.

[EDIT by danbrown AT php DOT net: Merged addendum to post by original author.]



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",...)