热搜:NVER node 开发 php

类方法中使用array_map报错--- Cannot redeclare

2024-09-21 18:25:02
类方法中使用array_map报错--- Cannot redeclare

方法定义如下:
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()


截图如下:





回复讨论(解决方案)

你不看错误信息的吗?
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;
  }

你不看错误信息的吗?
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;
  }
非常感谢

但是为什么会出现重新声明的错误呢?

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

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


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


所以。。。。好像不是这么回事吧

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

function getName($reflectionProperties){
  return $reflectionProperties->name;
}
无论在哪里都是定义全局函数
一语中的啊   
谢谢!!!