Good start! You have courage to throw yourself into the wild. Don't take the rest of my comment too hard, and also with a grain of salt, everyone is always learning, and probably someone would/will be able to correct me.
I am suggesting the following, as you are writing a framework with the purpose to learn about OOP:
I kinda left not much of your code as is, sorry for that. I could even go on and suggest to abstract the input too, to a ValidatableInterface where you can set the errors on the input itself to get rid of complicated x-dimensional arrays. But that is gonna blow this already exploded comment up. I repeat: take my suggestions with a grain of salt, I can learn too.
One other suggestion: read on design patterns (classic: ISBN 0-201-63361-2), it will change your code style for good. Or bad, as you will realize as soon as you are lost in a jungle of interfaces and abstract classes ;)
Also, if you want to know how others do, compare with already established frameworks, such as Symfony or CakePHP, they use Validators too.
Imo arrays generally are something that are better used as internal representation of data. In OOP, objects communicate with each others interfaces.
It's useful just to avoid using (or hide usage of) some language features to make more OO designs.
i think you can leverage webmozart/assert library 😇
Thank you very much. I got the idea and implemented that in my framework.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.