方法定义如下:
class maaper{
  ......
  public function getProperties(){
function getName($reflectionProperties){
return $reflectionProperties->name;
}
$domain=$this->get_domain();
$reflectionProperties=$domain->getProperties(ReflectionProperty::IS_PUBLIC);
$properties=array_map('getName', $reflectionProperties);
return $properties;
   }   ......
}
调用过程如下(注:$mapper_1、$mapper_2是在同一次运行时调用方法):$mapper_1=new mapper();
$mapper_2=new mapper();var_dump($mapper_1->getProperties());  //正确返回
var_dump($mapper_2->getProperties());  //报错  Cannot redeclare getName()
截图如下:

解决方案 »

  1.   

    你不看错误信息的吗?
    Fatal error: Cannot redeclare getName()
    致命错误:无法重新声明 getName()class maaper{
      protected function getName($reflectionProperties){
        return $reflectionProperties->name;
      }

      public function getProperties(){
        $domain=$this->get_domain();
        $reflectionProperties=$domain->getProperties(ReflectionProperty::IS_PUBLIC);
        $properties=array_map(array($this, 'getName'), $reflectionProperties);
        return $properties;
      }也可写作
    class maaper{
      public function getProperties(){
        $getName = function($reflectionProperties){
          return $reflectionProperties->name;
        };
        $domain=$this->get_domain();
        $reflectionProperties=$domain->getProperties(ReflectionProperty::IS_PUBLIC);
        $properties=array_map($getName, $reflectionProperties);
        return $properties;
      }
      

  2.   

    你有
    $reflectionProperties=$domain->getProperties(ReflectionProperty::IS_PUBLIC);
    就是重新进入了 getProperties,那么在 getProperties 中定义的函数不就重复在定义吗?
      

  3.   

    虽然有两次调用 $domain->getProperties 但是此处的getProperties是定义在$domain领域对象所属的类中,其中并没有getName方法。 报错信息是无法重新申明位于class mapper里的位于getProperties的getName方法。
    所以。好像不是这么回事吧
      

  4.   

    function getName($reflectionProperties){
      return $reflectionProperties->name;
    }
    无论在哪里都是定义全局函数