Что такое static в ООП php?
Для этого вам надо понимать в чем разница между классами и объектами. Вот есть методы и свойства объектов а есть методы и свойства классов. Последние как раз статические свойства и методы. Отсюда и все особенности их работы и возможные варианты использования. Класс у нас в системе может быть только один, а экземпляров этого класса (объектов) много.
Как правило статические методы используются в качестве порождающих. То есть вы вызываете статический метод класса а он тебе экземпляр этого класса.$foo = Singleton::instance();
$bar = AbstractFactory::create('bar');
$buz = Buz::fromArray([
    'many' => 'arguments', 'Buz' => 'has', 'private' => 'constructor'
]);
В PHP статику еще любят применять как замену обычным функциям в силу того, что для классов автозагрузка у нас есть, а для функций нету. Не сказать что это сильно хорошо, я бы даже сказал что это плохо. Учитывая что сейчас есть composer а благодаря opcache оверхэда от подключения для каждого запроса файла особо и нет. В целом лучше стараться избегать использования статики или во всяком случае делать в статических методах хоть сколько нибудь сложные вещи. И лучше всегда ограничиваться только случаями для порождения объектов, тут статика выглядит логично.
Если рассматривать с точки зрения пораждающиз статических методов, нам так же надо знать кого создавать. И тут появляются два ключевых слова - self и static. Причем self равносильно написанию имени класса в котором наш статический метод находится и просто позволяет уменьшить дублирование. static же намного интереснее, так как оно указывает непосдерственно на тот класс, из под которого был совершен вызов. Скажем если у вас есть наследование вы можете запихнуть порождающий метод в базовый класс, и тогда узнать кого создавать в принципе не проблема.class Foo {
    public static function createWithSelf() {
         // равносильно new Foo();
         return new self();
    }
    public static function createWithStatic() {
         // а тут мы пока не знаем кто такой этот static
         $foo = new static();
    }
}

class Bar extends Foo {}

$foo = Bar::createWithSelf(); // тут будет экземпляр Foo
$bar = Bar::createWithStatic(); // тут будет экземпляр Bar
Для доступа к статическим методам и членам классаclass SomeClass {

    public $a = 'isObjectValue';

    static $b = 'isStaticValue';

}

echo SomeClass::$b; # isStaticValue

$someClass = new SomeClass();
echo $someClass->a; # isObjectValue
к методам аналогично
Внутри класса есть еще self\static, но это чуть другое