Вы объявили функцию doSomething для защиты, что означает, что она может использоваться только внутри родительских классов, дочерних классов или самой себя. Вы используете это вне этого.
Вы можете попробовать изменить
abstract protected function doSomeThing();
в
abstract public function doSomeThing();
и
protected function doSomeThing(){
в
public function doSomeThing() {