title: Default values to static variables
body: <p>Is it possible to use <code>Traits</code> for giving default values to static variables? Consider the following example.</p>
  
  <pre><code>  trait Properties {
       public static $properties = [];
    }
  
    class Base {
       use Properties;
    }
    Base::$properties[0] = 'val1';
    Base::$properties[1] = 'val2';
    Base::$properties[2] = 'val3';
  
    class Derived extends Base {
       use Properties;
    }
    Derived::$properties[1] = 'changed value';
    Derived::$properties[3] = 'new value';
  
    var_dump(Base::$properties);
    var_dump(Derived::$properties);
  </code></pre>
  
  <p>I would like the output to be something like</p>
  
  <pre><code>  array (size=3)
      0 =&gt; string 'val1' (length=4)
      1 =&gt; string 'val2' (length=4)
      2 =&gt; string 'val3' (length=4)
    array (size=4)
      0 =&gt; string 'val1' (length=4)
      1 =&gt; string 'changed value' (length=13)
      2 =&gt; string 'val3' (length=4)
      3 =&gt; string 'new value' (length=9)
  </code></pre>
  
  <p>The example does not work, since <code>Base and Properties define the same property ($properties) in the composition of Derived</code>. If I remove the <code>use Properties</code> from <code>Derived</code>, the <code>$properties</code> variable is the same for both <code>Base</code> and <code>Derived</code>, and any changes applies to both classes. I hoped to get around this by including <code>Properties</code> in both classes. Are there any nice ways to achieve what I want? I don't have to use <code>Traits</code>, I just thought this could help.</p>