holas estuve destripando un cms y me tope con una clase abstracta y me surgio una duda, busque en google y encontre un ejemplo similar al que genero mi duda y es como este ejemplo
 
Aqui hay una clase abstracta y lo demas se entiende (la funcionalidad de los metodos es lo que menos importa)  
 Código PHP:
    abstract class Vehiculo
{
  public $potencia;
  public $peso;
 
  function __construct($potencia,$peso)
  {
    $this->potencia = $potencia;
    $this->peso = $peso;
 
    return true;
 
  }
 
  function relacionPesoPotencia()
  {
    if ($this->potencia>0)
    {
      return ($this->peso/$this->potencia);
    }
 
    return -1; //aqui una duda extra, por que "-1" y no "0" ??.. no es lo mismo?
  }
 
  abstract function aceleracionAproximada();
 
} 
    
  Y aqui otra clase que hereda de la clase abstracta  
 Código PHP:
    class Moto extends Vehiculo
{
 
  function __construct($potencia,$peso)
  {
    $this->potencia = $potencia;
    $this->peso = $peso;
 
    return true;
  }
 
  function aceleracionAproximada()
  {
     $coeficienteTransmision = 3.0;
 
     $t = $this->peso * 771.73 / (2.0 * $this->potencia * 735);
     $t = $t * $coeficienteTransmision;
     return $t;
  }
} 
    
  Bueno como dije arriba la funcionalidad de los metodos es lo de menos, pero mi duda aqui es:
¿Porque la clase Moto hace un "$this->potencia" y "$this->peso" si nunca inicio ese atributo??.. osea nunca hizo un  
public $potencia; 
public $peso; 
Entonces pense 

, debe ser un atributo que heredo de la clase abstracta "Vehiculo" .. entonces si es asi por que no usa  
parent::$potencia
parent::$peso  

 esa duda me tiene confundido.. alguien podria explicarme?? esto es lo que veo en las clases de un cms que estoy analizando..
y aprovechando la oportunidad.. siempre veo que hacen un 
return -1 no seria lo mismo y mejor hacer 
return 0 ?? 
PD: ese ejemplo lo saque de aqui http://www.epsilon-eridani.com/cubic/ap/cubic.php/pag/PHP5---Clases-abstractas-72.html