Mi sfugge questo..esempio

Codice PHP:
class Padre
  
{
  public 
$nome;

  public 
__construct($data)
    {
    
self::set($data);
    }
   public 
set($data)
    {
    
//print_r($this);
    
foreach($data as $k=>$v)
      {
      if(isset(
$this->$k)){$this->$k=$v;}
      }
    } 
  }

class 
Figlio extends Padre
  
{
  public 
$cognome;
  public 
__construct($data)
    {
    
parent::set($data);
    }
  }

$son=new Figlio(array("nome"=>"luca","cognome"=>"bottoni"));

print_r($son); 
Cosa succede, che la $son->set() ereditata dal padre, quando è invocata dal figlio caratterizza solo le proprietà della classe padre e non quelle presenti nel figlio, ma se stampo il $this nel padre quando si esegue il set() le proprietà del figlio ci sono!!

Come mai non riconsoce le proprietà del figlio la set del padre (ma il dump dice che ci sono!)?