Interesting question, however, I can't really think of a situation where this type of complexity would be essential.
I would think that you'd have to have some profiling telling you this was called a huge number of times for it to be anything more than a micro-optimization to put an init in the class definition. Depending on the size of the arrays, what are you really gaining over just hand merging the arrays in the definition?
It seems as if you are conflating static variables with class constants, in terms of how you are dealing with these, because, IF your code changes either $a or $b, the computed $c array will NOT reflect the change.
With that said, the limitations of class constants certainly does push someone towards a static variable if you're going to be creating a lot of instances of the class.
Just as devil's advocate, if $c is truly a derived array, you could just as easily have a method in your class you'd use to get access to the merged array:
protected getC() {
return array_merge($this->$a, $this->$b);
}
That would be safer if there is any chance that the static variables could be changed.