方法定義如下:
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;
}
無論在哪裡都是定義全域函數
一語中的啊
謝謝!!!