Static Method

In reply to TV:

  1. This is called a self-referential type. Remember that when you declare a class variable, you are only declaring the space to hold a handle to a class object, not the class object itself. (Take my short class on classes). The compiler only needs to know that pss_env_config is going to be a type, it does not need a complete definition. As another example, the class uvm_component has many self-referential types as well:
class uvm_component extends uvm_report_object;
...
extern function new (string name, uvm_component parent);
uvm_component m_parent;
protected     uvm_component m_children[string];
protected     uvm_component m_children_by_handle[uvm_component];
...
endclass
  1. The terminology of OOP is heavily overloaded. There is a difference between the static qualifier of a class method, and the static storage lifetime qualifier of a function. The storage lifetime (static or automatic) of a function is legacy from Verilog and does not apply to class methods which only have automatic lifetimes. See this link for more info. A static method of a class can refer to anything that does not require a ‘this’ handle.