Property access handlers combined with 'private' can be used as a replacement for dynamic properties.

<?php
class OSses {
    private $names = array();

    public function __set($name, $value) {
        if (!in_array($name, array('windows', 'dos')))
            $this->names[$name] = $value;
    }

    public function getNames() {
        return $this->names;
    }
}

$osses = new OSses();
$osses->linux = 'rocks';
$osses->windows = 'blows';

var_dump($osses->getNames());
?>
array(1) { ["linux"]=> string(5) "rocks" }