您好,欢迎访问一九零五行业门户网

类方法中使用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;
}
无论在哪里都是定义全局函数
一语中的啊   
谢谢!!!
其它类似信息

推荐信息