呵呵,反射我也不是很明白继承的话,就应该是这个样子: 2继承1的话,可以通过NEW关键字来调用1里面的任何方法和属性class1{ function a(){} }class2 extends class1 { $newa = new class1(); $newa->a(); }
<?php class test{ function a(){ $this->b(); } function b(){ $methods = get_class_methods($this); $total = count($methods); $i = 0; while($i<($total-1) && $methods[$i+1]!='b') { $i++; } echo 'The pre function is ' . $methods[$i]; } } $T = new test; $T->b(); ?>
非要在一个类里吗?如果2和方法不在一个类里的话,
可以用 带B函数的类 继承 带A函数的类,
再在 带B函数的类 里重写 带A函数类里 的A函数。
to qianziai0912:反射不知道怎么用
反射能无差别的回溯类方法和属性,
如果反射结果知道 类方法有 class::a、class::b和class::c
其中 class::a和class::b都 调用了 class::c
那么当前在 class::c 中怎么知道 是class::a还是class::b调用的呢?另外用继承重写不知道怎么用
class1{
function a(){}
}class2 extends class1
{
function a(){
$this->b();//重写class1::a ?
}function b(){
//然后怎么得到方法a()的名称?
}
}====================================================
如果 类方法有 class::a、class::b和class::c
其中 class::a和class::b都 调用了 class::c
那么当前 class::c 中如何知道 谁调用的?那么想 有个类方法 比如 class::x
每次 class::c 中 执行class::x,就可以返回调用者名称class{function a(){
self::c();
}function b(){
self::c();
}function c(){
self::x();
}function x(){
//return 调用者名称??
}
}
2继承1的话,可以通过NEW关键字来调用1里面的任何方法和属性class1{
function a(){}
}class2 extends class1
{
$newa = new class1();
$newa->a();
}
class test{
function a(){
$this->b();
}
function b(){
$methods = get_class_methods($this);
$total = count($methods);
$i = 0;
while($i<($total-1) && $methods[$i+1]!='b') {
$i++;
}
echo 'The pre function is ' . $methods[$i];
}
}
$T = new test;
$T->b();
?>
panzhiqi :你的意思,把当前对象的所有方法名 和 当前方法名 比较,然后不是当前方法名的,就是结果,
这个当然,第一个例子中是这样的,不过是想得到的是 “正在调用本函数,的上一级函数,的名称”
Exception::getTrace方法可以得到堆栈跟踪信息
所以可以通过new一个Exception对象,取得getTrace后,再去分析
self::c();
} function b(){
self::c();
} function c(){
echo "调用我的函数为:".self::x();
} function x(){
echo "\n hu_zhenghui 方法:\n";
$return=debug_backtrace();
print_r($return);
//return $return[2]['function']; try{
throw new Exception();
}catch (Exception $e) {
echo "\n 277894613 方法:\n";
$return=$e->getTrace();
print_r($return);
return $return[2]['function'];
}
}
}
//clas::a();
clas::b();