advice on polymorphism
you should use an abstract class and an interface. also define the doPrint method as static when you want to call it static.

abstract class worker {

    /*...*/

    public static function doPrint(worker_interface $who) {

        /*...*/
    }
}

interface worker_interface {

    public function isWhat();
    public function setName($name);
}

class boss extends worker implements worker_interface {


    public function isWhat() {

        return 'the boss';
    }
}

class bee extends worker implements worker_interface {


    public function isWhat() {

        return 'not the boss';
    }
}


define the type for all methods you are passing worker instances to like in doPrint

EDIT:

alternatively you could also just add an abstract function instead of using an interface

abstract class worker {

    /*...*/

    public static function doPrint(worker $who) {

        /*...*/
    }

    public abstract function isWhat();
}

class boss extends worker {


    public function isWhat() {

        return 'the boss';
    }
}

class bee extends worker {


    public function isWhat() {

        return 'not the boss';
    }
}