比如说有一个类: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())吗?请各位高手指教!

解决方案 »

  1.   

    在B::check( '123' );方法中加多一个参数, 把A类的对像传过去。
      

  2.   


    就算把A类的对象传进去了,也没办法知道是A类的哪个方法调用的。我想问的就是PHP有没有像self、parent这样的内置对象引用?
      

  3.   

    当然可以!class A {
      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);
      

  4.   

    PHP是弱类型语言,function的每个参数都不能像其他强类型语言那样自动检测参数的数据类型我现在做一个静态类,想检测所给的参数是否符合某种数据类型,封装好,而不用每个参数都if( !is_int($var) ) {...} 的检查,直接调用B::isInteger( $var ),如果不符合的话,就输出 A::get()中参数$var不是Integer类型做PHP真累吖..
      

  5.   

    LZ的想法可以实现,
    可以在类中设置self,parent等属性,在构造函数里面将这些属性初始化,指定相应的对象,
    这样可以调用各自的方法了,比如
    $a = new A();
    $a->self = & $a;
    同样parent 属性也可以设定
      

  6.   

    如果按照9楼说的话,我每检查一个参数就new一个对象了。我做成静态类的目的就是不想这样
      

  7.   

    我想问的就是PHP有没有像self、parent这样的内置对象引用?
    ------------------------------有这些的对象, 
      

  8.   

    self::property;         // 调用静态的
    parent::method_name();  // 调用父类的
      

  9.   

    coolesting好像没看清楚我想表达的意思,我这样做是想补充弱类型语言的不足,所以才想做一个这样的类出来的,就像JAVA一样,在编译的时候就能报错。
      

  10.   

    class A {
    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);
      

  11.   

    $log[count($log)-1];
    改成$log[1]得了,就是上次调用该函数的函数的信息。
      

  12.   

    嗯,这个想法其实很自然....不过php现在也可以加类型限制,
    比如 
    function test(Array $a, ClassB $b) 
    这样的,你不如做几个wrapper类, 然后用上: function test(Integer $i) 这样...
    或者用pecl里现成的: http://ca.php.net/manual/en/intro.spl-types.php当然不是很完美.......但是世界上没有完美的事情啦......楼上的也不错,可以用
      

  13.   

    debug_backtrace()好像可以哦。。我试验一下。。