方法定义如下:
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()
截图如下:
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;
}
$reflectionProperties=$domain->getProperties(ReflectionProperty::IS_PUBLIC);
就是重新进入了 getProperties,那么在 getProperties 中定义的函数不就重复在定义吗?
所以。好像不是这么回事吧
return $reflectionProperties->name;
}
无论在哪里都是定义全局函数