比如说有一个类:class A {
public function get( $stringVar ) {
B::check( $var );
}
}class B {
public static function check( $var ) {
//...something to do
}
}当A->get( '123' )的时候,函数去调用B::check( '123' );方法,那么我能不能在B::check()里面获取调用该方法的“来源”(即A::get())吗?请各位高手指教!
public function get( $stringVar ) {
B::check( $var );
}
}class B {
public static function check( $var ) {
//...something to do
}
}当A->get( '123' )的时候,函数去调用B::check( '123' );方法,那么我能不能在B::check()里面获取调用该方法的“来源”(即A::get())吗?请各位高手指教!
就算把A类的对象传进去了,也没办法知道是A类的哪个方法调用的。我想问的就是PHP有没有像self、parent这样的内置对象引用?
public function get( $var ) {
B::check( $var );
}
}class B {
public static function check( $var ) {
echo $var;
print_r(debug_backtrace());
//...something to do
}
}$p = new A;
$p->get(123);
可以在类中设置self,parent等属性,在构造函数里面将这些属性初始化,指定相应的对象,
这样可以调用各自的方法了,比如
$a = new A();
$a->self = & $a;
同样parent 属性也可以设定
------------------------------有这些的对象,
parent::method_name(); // 调用父类的
public function get( $stringVar ) {
B::check( $stringVar );
}
}class B {
public static function check( $var ) {
print_r(debug_backtrace());
if(gettype($var) !== 'string')
{
$log = debug_backtrace();
$lastCaller = $log[count($log)-1];
echo "Error in file {$lastCaller['file']},line:{$lastCaller['line']} >> "
.$lastCaller['class']
.$lastCaller['type']
.$lastCaller['function']."(".implode(',',$lastCaller['args']).")";
}
}
}
A::get(123);
改成$log[1]得了,就是上次调用该函数的函数的信息。
比如
function test(Array $a, ClassB $b)
这样的,你不如做几个wrapper类, 然后用上: function test(Integer $i) 这样...
或者用pecl里现成的: http://ca.php.net/manual/en/intro.spl-types.php当然不是很完美.......但是世界上没有完美的事情啦......楼上的也不错,可以用