Abstract no define realmente control de acceso a propiedades o métodos, al menos no de la forma que lo hacen private, protected y similares.
Abstract solo indica que un método se ha declarado en una clase pero que en dicha clase no se ha definido la implementación del método, quiere decir que otras clases hijas se deberán encargar de esa implementación
Sin embargo, cierto es que una clase abstracte no debe ser implementada de forma directa al crear un objeto, sino que debería ser extendida y luego crear un objeto de la clase hija, en dicho sentido, sip, puedes ver el usar cosas como protected o private en una clase abstracta como un refuerzo, obviamente el dejar las propiedades y métodos como públicos en una clase abstracta no es que esté mal.
En todo caso, si defines cosas como protected o private en una clase abstracta lo que estarás definiendo es la forma en que las clases que extiendan a la abstracta van a funcionar, esto sería un ejemplo de ello:
Código PHP:
abstract class Operacion
{
private $_operando1;
private $_operando2;
protected $_resultado;
protected function __construct($operando1, $operando2)
{
$this->_operando1 = $operando1;
$this->_operando2 = $operando2;
$this->_resultado = $this->_operando1 + $this->_operando2;
}
public abstract function resta($operando1, $opreando2);
}
class SumaResta extends Operacion
{
public function __construct($num1, $num2)
{
if ($num1 == "" || $num2 == "") {
die('No hay nada que sumar.');
} else if (!ctype_digit($num1) || !ctype_digit($num2)) {
die('Solo se aceptan námeros para hacer la suma.');
} else {
parent::__construct($num1, $num2);
echo $this->_resultado;
}
}
public function resta($num1, $num2)
{
$this->_resultado = $num1 - $num2;
}
}