Tag-Archiv für 'setter'

Warum öffentliche Attribute keine gute Idee sind

Mal was ganz anderes. Ein kleiner Programmierexkurs. Wenn Entwickler Klassen schreiben achten sie oft nicht genug auf die Sicherheit ihrer Attribute und deklarieren die einfach öffentlich:


Class Me extends Human {
	public $mood = '';
}

Soweit so gut, aber dadurch kann jeder einfach meine Stimmung setzen? Ist das gut? Will ich das?


$Me = new Me;
$Me->mood = 'wildstyle';

Ich weiß nicht wies euch geht, aber ich find das ganz und gar nicht gut. Besser wäre, wenn das vorher nochmal geprüft wird, oder? Also:


Class Me extends Human {
	protected $_mood = '';

	public function setMood($mood) {
		if (in_array(strtolower($mood),
		array('wildstyle', 'mehr Unschönheiten')) {
			//ich lass mir doch nicht die Laune vermiesen
			return FALSE;
		} else {
			$this->_mood = strval($mood);
			return TRUE;
		}
	}
}

Daraus resultiert dann:


$Me = new Me;
//geht nicht
$Me->setMood('wildstyle');
//geht
$Me->setMood('partypose');

Fühlt man sich dabei nicht gleich viel sicherer? Ja, Getter und Setter haben auch ihre Kritiker. Aber grad bei einem User-Objekt find ich es sehr gut wenn es sich quasi selbst verteidigt. Ihr nicht?