Abstract static methods are an odd concept. The static method basically “hardcodes” the method for the class, making sure that there is only one instance (~ singleton). But to make it abstract means that you want to force another class to implement it.
I see what you are trying to do, but when you do abstract classes, I would avoid static methods in the base class. Instead, you can use late static binding (static: :) to call the tableStruct method in the "child" class. This does not cause the method to be implemented as abstract, but you can test the implementation and throw an exception if it does not exist.
public static function foo(){
source share