AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

[PHP] Konstante in Klasse

Ein Thema von Luckie · begonnen am 7. Jul 2009 · letzter Beitrag vom 13. Jul 2009
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#11

Re: [PHP] Konstante in Klasse

  Alt 7. Jul 2009, 16:35
Soweit ich weiß gibts in PHP keine Sichtbarkeitsangabe für Klassenkonstanten. Kannstes ja mit einer private static Variablen versuchen (ggf. mit final wie in Java? Da bin ich aber nicht sicher) ....

Viele Grüße
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: [PHP] Konstante in Klasse

  Alt 7. Jul 2009, 16:45
Ja, wenn Du sie für jede Instanz (und damit eben genau nicht einmalig für die Klasse) brauchst, dann kannst Du nur eine private Variable nehmen, die Du bei der Deklaration auch gleich initialisierst.

private $foo = 'bar';

Damit haben auch abgeleitete Klassen keinen Zugriff auf diese Variable.


Siehe auch:
http://de.php.net/manual/en/language.oop5.static.php
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: [PHP] Konstante in Klasse

  Alt 7. Jul 2009, 21:38
Hm, OK. Ich glaube, dass es eine Konmstante ist, ist mir wichtiger, als die Sichtbarkeit. Irgendwie eine komische Sprache, diesees PHP.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#14

Re: [PHP] Konstante in Klasse

  Alt 7. Jul 2009, 21:48
Zitat von Luckie:
Hm, OK. Ich glaube, dass es eine Konmstante ist, ist mir wichtiger, als die Sichtbarkeit. Irgendwie eine komische Sprache, diesees PHP.
Das liegt wohl daran, dass OOP in PHP noch recht "frisch" ist. Ansonsten ist die (Skript-)Sprache eigentlich recht geil.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#15

Re: [PHP] Konstante in Klasse

  Alt 9. Jul 2009, 22:10
Eine Klassenkonstante braucht an sich keine Sichtbarkeiten. Sie ist eher dazu da, den generellen Namespace zu befreien (seit 5.3 gibts ja auch tatsaechliche Namespaces, Klassenkonstanten ham aber trotzdem was).

Nehmen wir an, du hast eine MVC-App. Im Model hast du bspw. Benutzer, du hast Gruppen und du hast Mitglieder (also Benutzer) in diesen Gruppen. In einer klassischen Applikation haettest du also Konstanten definiert:
Code:
define('USER_STATUS_ACTIVE', 0);
define('USER_STATUS_INACTIVE', 1);
define('USER_STATUS_DELETED', 2);

define('GROUP_STATUS_PRIVATE', 0);
define('GROUP_STATUS_PUBLIC', 1);

define('GROUP_MEMBER_FOUNDER', 0);
define('GROUP_MEMBER_MODERATOR', 1);
define('GROUP_MEMBER_USER', 2);

define('GROUP_MEMBER_STATUS_INVITED', 0);
define('GROUP_MEMBER_STATUS_PENDING', 1);
define('GROUP_MEMBER_STATUS_MEMBER', 2);
Das funktioniert zwar, ist aber haesslich da du bei einer grossen Applikation relativ bald einen ganzen Haufen Konstanten hast, die dir den globalen Namespace verseuchen. Spaetestens sobald deine Code-Completion ewig braucht bis sie geladen hat, ist alles zu spaet.

Wenn du nun richtig programmierst (und ich meine richtig, also mit PHP5, OOP, MVC, usw.) dann hast du eh eine Klasse, die deinen Benutzer definiert. Warum also nicht die Stati dort definieren:
Code:
class User {
  const ACTIVE = 0;
  const INACTIVE = 1;
  const DELETED = 2;
//...
}
Ansprechen kannst du sie dann mit User::ACTIVE, wass nicht nur kuerzer ist als die Konstante von oben, sondern auch klar zeigt, wo du dich befindest: naemlich im User-Kontext. Vor allem bei den Gruppen musst du dann nicht erstmal schaun ob das jetzt GROUP_ oder GROUP_MEMBER_ ist:
Group:RIVATE und GroupMember::FOUNDER vereinfachen das Unterscheiden dann doch ein bisschen.

So, und wofuer braeuchte man hier jetzt Sichtbarkeiten? Von aussen kann der Wert sowieso nicht geaendert werden, und Konstanten sind eigentlich dazu da, um Stati, Codes, usw. zu definieren so dass man davon ausgehen kann, dass diese immer gleichbleiben (bzw. dass die ganze Applikation auf eine eventuelle Anpassung im Code reagiert).

Was dieses "nur in der Klasse gueltig" betrifft: was meinst du mit nur in der Klasse gueltig? Der Vorteil von Konstanten ist ja auch der, dass sie global gueltig sind, und nicht nur in dem Kontext, in dem sie definiert wurden (es sei denn man benutzt global )

@DanielG: OOP in PHP ist gar nicht so frisch, das gabs seit den Anfaengen von PHP4. Die Tatsache dass es verwendbar ist, ist auch nicht mehr so frisch, PHP5 gibts ja schon ne Weile. Das Problem ist nur dass sich die Webhoster immer so viel Zeit lassen, auf neue Versionen zu springen. PHP 5.0 gibts ja schliesslich seit Juli 2004, 5.1 seit November 2005 und 5.2 seit November 2006. Die sind eigentlich alle drei hoffnungslos veraltet und man kann nur hoffen, dass die Hoster relativ schnell auf PHP 5.3 springen

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#16

Re: [PHP] Konstante in Klasse

  Alt 13. Jul 2009, 11:15
Zitat von alcaeus:
So, und wofuer braeuchte man hier jetzt Sichtbarkeiten?
Ich wollte damit zum Beispiel deutlich machen, dass diese Konstante nur zu dieser Klasse gehört, also klassenspezifisch ist oder wie man das nennen will.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz