Static Properties
Static properties belong to the class itself rather than to individual objects. They are declared using the static keyword and are accessed directly through the class name using the scope resolution operator (::), without creating an instance. Unlike static methods, static properties require the dollar sign when accessed: ClassName::$propertyName.
Static properties are shared across all instances of a class. There is only one copy of the value at the class level, which makes them useful for shared configuration, counters, or metadata that should not vary per object.
A class can contain both static and non-static properties. Inside the same class, a static property is accessed using self::$propertyName. In inheritance scenarios, a child class can access a parent’s static property using parent::$propertyName, and it can also access it directly through the child class name if visibility allows it.
In short, static properties represent class-level state, not object-level state.