downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

runkit_class_emancipate> <Runkit_Sandbox_Parent
Last updated: Fri, 13 Nov 2009

view this page in

runkit_class_adopt

(PECL runkit >= 0.7.0)

runkit_class_adopt ある基底クラスを、他のクラスを継承させたクラスに変換する。親クラスの適切なメソッドを追加する

説明

bool runkit_class_adopt ( string $classname , string $parentname )

パラメータ

classname

変換の対象となるクラス。

parentname

継承させる親クラス。

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。

例1 runkit_class_adopt() の例

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

class 
myChild {
}

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

上の例の出力は以下となります。

Parent Function Output

参考

  • runkit_class_emancipate() - 他のクラスを継承しているクラスから継承関係を解消し、 親クラスから継承しているメソッドを取り除く



add a note add a note User Contributed Notes
runkit_class_adopt
muramas at cyberdiscordia dot org
02-Sep-2005 10: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.]

runkit_class_emancipate> <Runkit_Sandbox_Parent
Last updated: Fri, 13 Nov 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites