runkit_class_adopt

(PECL)

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

说明

bool runkit_class_adopt ( string classname, string parentname )

参数

classname

Name of class to be adopted

parentname

Parent class which child class is extending

返回值

如果成功则返回 TRUE,失败则返回 FALSE

范例

例子 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();
?>

上例将输出:

Parent Function Output


add a note add a note User Contributed Notes
muramas at cyberdiscordia dot org
05-Sep-2005 06:25
Just an addition to my previous comment below: 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.
muramas at cyberdiscordia dot org
03-Sep-2005 06:09
Function visibility (in PHP5) has some quirks as compared to the normal behavior with "extends".  Consider the following:

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

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

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

while this:
   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.