Почему выводятся неопределенные свойства объектов в PHP?
Вместо echo лучше делать var_dump или хотя бы print_r на весь объект, они многое Вам прояснят.
В данном случае когда вы делаете $this -> name = $name; у объекта создается новое свойство name.object(Customer)[1]
  public 'name1' => null
  public 'lastname' => string 'Doe' (length=3)
  public 'name' => string 'John' (length=4)PS Ну и вообще в коде у Вам путаница какая то.
Если Вы уж пишите геттер getName - то он должен что то возвращать, а не делать echo абсолютно другой переменной lastname.PPS Я хочу верить что этот пример был Вами придуман для теста, и Вы не пишите геттеры/сеттеры там где в этом нет никакой необходимости
Почитайте про "магические методы". Особое внимание на __get() и __set().