Как правило, первое лучше по причинам, о которых уже говорили другие люди.
Однако, если вам нужно хранить данные в классе в частном порядке, но след членов данных неизвестен, вы часто будете видеть ваш второй пример в сочетании с хуками __get () __set (), чтобы скрыть, что они хранятся в частном порядке.
class someThing {
private $data = array();
public function __get( $property )
{
if ( isset( $this->data[$property] ) )
{
return $this->data[$property];
}
return null;
}
public function __set( $property, $value )
{
$this->data[$property] = $value;
}
}
Тогда объекты этого класса можно использовать как экземпляр stdClass, только на самом деле ни один из заданных вами членов не является публичным
$o = new someThing()
$o->cow = 'moo';
$o->dog = 'woof';
// etc
Этот метод имеет свои применения, но имейте в виду, что __get () и __set () примерно в 10-12 раз медленнее, чем непосредственная установка открытых свойств.