PHP const vs. static
Und noch ein kleiner Artikel in den frühen Morgenstunden...
Neulich kam mir mal wieder die Frage in den Kopf... "const" oder "static" nutzen für die Definition beispielsweise von Schlüsselwerten.
Kleines Beispiel:
Per const:
- class Person {
- const KEY_VORNAME = 'vorname';
- const KEY_NACHNAME = 'nachname';
- [...]
- public function toArray(){
- self::KEY_VORNAME => $this->...,
- self::KEY_NACHNAME => $this->
- );
- }
- }
Per static:
- class Person {
- protected static $keyVorname = 'vorname';
- protected static $keyNachname = 'nachname';
- [...]
- public function toArray(){
- self::$keyVorname => $this->...,
- self::$keyNachname => $this->
- );
- }
- }
Unterschiede zwischen den beiden Varianten sind die folgenden:
- keine Veränderbarkeit der Sichtbarkeit bei const (eher nachteilig). Bei static über statische getter und setter fein einschränkbar
- keine Veränderbarkeit des Wertes von const während der Laufzeit
- mögliche ungewollte Manipulierbarkeit des Wertes bei static
Das fiel mir zunächst dazu ein...
Ich bin für mich selbst zu dem Schluss gekommen, dass Werte, die definitiv nie während der Laufzeit verändert werden sollten (wie beispielsweise die Schlüssel im Beispiel) mit einem const besser aufgehoben sind. Außerdem fällt die Schreibweise dann im Code auch besser auf.
Zwar geht es nicht darum, den Code vor dem Programmierer zu schützen, aber auch wenn man die Schlüssel dann außerhalb benutzt, wird deren unveränderbarer Charakter klarer.
Statische Attribute werde ich in Zukunft auch weiterhin für Eigenschaften der Klasse verwenden, die sich in Ausnahmefällen ändern dürfen oder beispielsweise fürs Singleton Pattern. Hier läge man mit const total falsch.
Interessant wäre hier noch eine bessere Handhabung von final wie in Java, dann könnte man sich das const tatsächlich komplett sparen.
Vielleicht gibt es ja sogar noch bessere Lösungen?
Julian Pustkuchen ist passionierter Software- & Webentwickler mit den Schwerpunkten Softwaredesign, Objektorientierung, Ablaufoptimierung und Usability bei webks. Ein weiterer Schwerpunkt ist die Entwicklung im CMS Drupal.
Er besitzt einen Abschluss als B.Sc. Wirtschaftsinformatik (dual) und studiert derzeit für seinen Abschluss als Master of Science Wirtschaftsinformatik.
Entwickelt Julian gerade keine Software, fährt er Ski, Mountainbike, spielt Badminton, segelt oder verbringt Zeit mit Freunden.
Dieser Blog dient als sein "öffentlicher Notizblo(ck/g)".
Neueste Blogeinträge
-
05.02.2012 - 09:52
-
03.02.2012 - 18:14
-
27.01.2012 - 00:12
Tags in Blogeintrag - Kategorie
Webbasierte Lösungen? Machen wir!
webks: websolutions kept simple
http://www.webks.de






Comments
Handy-Abo falle
Hi Julian,
hör mal findest Du es wirklich gut, auf Deiner Webseite Werbung für Handy-Abo-Fallen zu schalten? Also ich würde das an Deiner Stelle echt mal überdenken. Ich meine: Du schreibst hier doch schöne Sachen für die allgemeinheit und scheinst ein netter typ zu sein. Klick einfach mal auf die "Wann wirst Du heiraten" Werbung und Du wirst shen was ich meine...
Hallo "Gast", vielen Dank für
Hallo "Gast",
vielen Dank für deine Nachricht. Nett wäre gewesen, wenn du deinen Namen angegeben hättest oder eine E-Mail Adresse, dann hätte ich gerne persönlich geantwortet.
Am besten wäre sogar eine Nachricht über das Kontaktformular gewesen, da der Eintrag ja nicht wirklich hierher passt.
Aber nimm das jetzt nicht als Kritik, ich freue mich über den netten Hinweis! Zum ersten bin ich natürlich auch immer froh über Seiten ohne Werbung, andererseits verstehe ich auch, dass dies die Alternative zu Gebühren ist. Ich hoffe das siehst du auch so.
Zum anderen ist deine Anmerkung super, was eine solch negative Werbung angeht und ich werde sie selbstverständlich sofort sperren! Allerdings müsstest du mir dazu bitte sagen, wo genau diese Werbung angezeigt wird. Handelt es sich um eine Google Werbeanzeige oder den Layer über der Seite?
Noch einmal vielen vielen Dank für deine Hilfe!! Abzocke gehört abgestellt! 100% Zustimmung!
const
Hi Julian, dein Beitrag finde ich ganz gut. Konstanten innerhalb einer Klasse würde ich nicht verwenden um Schlüssel-Werte zu definieren. Eine const-Variable sollte vielmehr einen konstanten Zustand definieren. Siehe hier:
const GENDER_UNKNOW = 0;
const GENDER_FEMALE = 1;
const GENDER_MALE = 2;
const USER_OFFLINE = false;
const USER_ONLINE = true;
Hi, sehr gute Anmerkung und
Hi, sehr gute Anmerkung und volle Zustimmung. Deine Beispiele sind natürlich vom Klassenkontext vollkommen gelöst, damit ist die Thematik noch einfacher zu behandeln.
Post new comment