constraint pload_cons{pload.size() == len;}
function new(string name="my_transaction");
super.new(name);
pload = new[len];
endfunction : new
Although this is perfectly legal you do not want to be initialising dynamic arrays in the constructor. Everytime you create a sequence_item you will allocate memory space.
The preferred solution is to randomize len according to the constraints, and then allocate space in post_randomise() instead of new(). This allows you much greater flexibiilty when creating and populating the sequencE_item