php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.08.2007, 23:42  
Benutzer
 
Registriert seit: 01.07.2007
Beiträge: 47
PHP-Kenntnisse:
Fortgeschritten
ecomeback
Standard public, protected, private Funktionen

Vielleicht kann mir jemand von euch weiter helfen.

Ich schaue mir derzeit viel anderen Code an und versuche stilistisch und technisch die Idee hinter den jeweiligen Skripten zu durchschauen. Nun ist mir aufgefallen, dass oft
@access {public|protected|private}
vor den Funktionen notiert wird. Dabei werden oft (nicht immer!) die Funktionen mit einem Prefix eingeleitet. Ohne für "public", _ für "protected" und __ für "private".

Also also Beispiel
Code:
/** 
 * [...]
 *@access private
 */
function __doSomething() {}
In PHP5 könnte man ja gleich schreiben
Code:
private function __doSomething() {}
Ich nehme an, dass man das aufgrund der Abwärtskompatibilität zu PHP4 das nicht macht. Was ich allerdings nicht verstehe, wie man darauf kommt die Funktion als private zu deklarieren. Sollte ein __ mich daran hindern von "außen" zuzugreifen? Wird dieses _, __ also an igendeiner Stelle geprüft oder ist das lediglich ein Hinweis? Also konkret: Warum wird die Funktion als private deklariert, wenn man theoretisch doch darauf zugreifen kann? Oder soll das zunächst nur ein Hinweis sein, dass man es nicht macht, wenn man ggf. als Team entwickelt?
ecomeback ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 13.08.2007, 01:10  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Ich nehme an, dass man das aufgrund der Abwärtskompatibilität zu PHP4 das nicht macht.
genau. is nur ne notiz für später...
brian johnson ist offline  
Alt 13.08.2007, 02:50  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Ähm ... Nene, so is das nicht ganz korrekt. Die @-Notation ist für PHPDoc, wird zum Beispiel von PHPDocumentor ausgewertet. Das sieht man auch schon daran, dass hinter dem einleitenden Multi-Comment-Tag /* gleich noch ein Stern folgt und sowieso jede Zeile mit einem Stern beginnt. Einmal wird es wie gesagt von PHPDocumentor ausgewertet, Zweitens ist es für geübte Leser einfacher da durchzuschauen (da kann noch wesentlich mehr stehen) und Drittens können diverse Editoren dies auch auswerten, um Hilfestellungen zu Funktionen und Methoden zu geben (PDT auf Eclipse zB).

Wenn man ernsthaft in PHP5 programmieren will, dann kann man es nicht nur so, wie erwähnt, schreiben, sondern man sollte es auch auf jeden Fall. Auch wenn man davor den DocBlock noch setzt ist es einfach stilistischer besser, weil damit jedem (vorallem dem PHP-Parser) klar ist, was gemeint ist.

Woran du nu hängen geblieben bist, sind einfach die DocBlocks. Dienen in erster Linie zur Dokumentation, aber können (wie gesagt zB Editoren) auch anderweitig ausgewertet werden. Für den Programmablauf sind sie völlig unerheblich und können (mehr oder weniger) vom Entwickler frei gesetzt werden. Genauso gut könnte er auch @access public setzen und trotzdem vor function ein private. Wär nur nich besonders sinnvoll.

Übrigens:
Doppelter Unterstrich bei Funktionsnamen tunlichst vermeiden. Die sind PHP selbst für besondere Funktionen (Siehe Handbuch: Magic Methods) vorbehalten. Üblich ist kein Unterstrich für public, ein Unterstrich für private und protected und zwei Unterstriche für (vordefinierte) Magic-Methods.
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 13.08.2007, 12:12  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ja, das mit den magischen Methoden muss man dann wissen, andererseits finde ich das Konzept der Benennung, zumindest wenn PHP 4 noch im Spiel ist, nicht unbedingt schlecht.

http://de3.php.net/oop5.magic
Zitat:
The function names __construct, __destruct (see Constructors and Destructors), __call, __get, __set, __isset, __unset (see Overloading), __sleep, __wakeup, __toString, __set_state, __clone and __autoload are magical in PHP classes. You cannot have functions with these names in any of your classes unless you want the magic functionality associated with them.
Zergling-new ist offline  
Alt 13.08.2007, 18:09  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Benutze die Bennenung auch für PHP5 weiter, allerdings reicht meines Erachtens ein einfacher Unterstrich für protected und private aus. Oder anders gesagt: Also ohne Unterstrich is offen zugänglich, als mit einfach für "intern".
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 19.08.2007, 22:16  
Benutzer
 
Registriert seit: 01.07.2007
Beiträge: 47
PHP-Kenntnisse:
Fortgeschritten
ecomeback
Standard

Vielen Dank für die ausführliche Darstellung,

bezüglich der Doku war mir das schon klar. Was mich nur irritiert hat ist, das man es im Kommentar als "private" deklariert und dann die Funktion selbst nicht als solche "aufschreibt". Im gewissen Sinne hat das natürlich mit Konvention zu tun, allerdings hindert mich so niemand daran die Funktion außerhalb der Klasse aufzurufen. Gerde vor dem Hintergrund, dass nicht alle Funktionen die als protected genkennzeichnet sind mit einem Unterstrich gekennzeichnet sind. Da stellt sich dann die Frage wo der "Fehler" ist. Kommentar per Copy und Paste versemmelt, Unterstrich vergessen, oder soll das so. Das ist natürlich inkonsequent und nicht immer klar ersichtlich.

Mein angesproche "Prüfung" solche Funktionen aufzurufen geht in die Richtung, dass es vielleicht ein Pattern gibt, dass den Aufruf von Funktionen steuern könnte und somit den direkten Aufruf unterbindet. Aber ich denke das wäre sicherlich nicht sonderlich sinnvoll, wenn es überhaupt möglich ist.
ecomeback ist offline  
Alt 19.08.2007, 22:29  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Es ist nicht ganz einfach, denn beim Entwickeln wechselt man teilweise zwischen public, protected und private Deklarationen.
Zergling-new ist offline  
Alt 19.08.2007, 23:08  
Benutzer
 
Registriert seit: 01.07.2007
Beiträge: 47
PHP-Kenntnisse:
Fortgeschritten
ecomeback
Standard

Ich kann mir das schon vorstellen, dass das nicht ganz einfach ist. Gibt es denn so komplexe Editoren, die das gesamte Konstrukt "im Blick" haben. Wäre doch gut, wenn man merkt, dass eine als public gekennzeichnet Funktion "plötzlich" private ist. Gibt es also Hilfen, die mir helfen Veränderungen und ggf. Konflikte ggf. auch über die DocBlocks als sturktuelles Mittel darstellen oder ist das mehr Wunschdenken?
ecomeback ist offline  
Alt 20.08.2007, 01:31  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von KingCrunch
Benutze die Bennenung auch für PHP5 weiter, allerdings reicht meines Erachtens ein einfacher Unterstrich für protected und private aus. Oder anders gesagt: Also ohne Unterstrich is offen zugänglich, als mit einfach für "intern".
ist für php5 allerdings ein bisschen idiotisch. was ich besser fand, war, wie ich zuletzt in nem kunden script gesehen hab, wenn man einfache unterstriche für funktionen benutzt die durch interfaces definiert wurden. auch wenn die nich so häufig sind...
brian johnson ist offline  
Alt 20.08.2007, 10:37  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von brian johnson
wenn man einfache unterstriche für funktionen benutzt die durch interfaces definiert wurden
Du meinst Klassen? Hm?!
Zergling-new ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Transparente Runde Ecken bei Thumbnial realisieren tomtaz PHP Tipps 2008 3 08.07.2008 01:20
Templatesystem mit Funktionen und Variablen drin? BartTheDevil89 PHP Tipps 2008 6 01.07.2008 09:32
Protected Eigenschaft in der eigenenen Klasse nicht anpre... HStev PHP-Fortgeschrittene 2 30.05.2008 18:47
GD-Spezialisten gesucht....wer kann helfen? rezix PHP Tipps 2008 12 26.02.2008 17:55
welche funktionen deaktivieren brian johnson PHP-Fortgeschrittene 4 15.11.2007 09:25
Klassen und externe Funktionen ? ssm PHP-Fortgeschrittene 17 18.07.2007 11:59
eine Variable für alle Funktionen definieren Wing PHP Tipps 2007 16 24.06.2007 21:02
Funktionen überprüfen und Grafik Funktionen hans.karl2 PHP Tipps 2006 10 31.07.2006 20:08
Funktionen in Funktionen - ist das gut? Schneckenkind PHP Tipps 2006 23 10.06.2006 13:39
Globale Variabeln in Funktionen finerip PHP Tipps 2007 3 28.11.2005 16:00
Code Syntax Highlighting imported_Lumio PHP-Fortgeschrittene 9 16.08.2005 11:06
Eure Ideen sind gefragt: eigene Funktionen verwalten PHP-Fortgeschrittene 12 17.01.2005 15:00
error: Zugriff auf protected variable aus extendet klasse PHP Tipps 2004 3 26.09.2004 23:39
Funktionen Erklärung TheSkaterFriend PHP Tipps 2004 14 11.06.2004 22:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php doppelter unterstrich, private funktionen, php protected function, funktionen protected, protected private public, protected funktionen, php private funktionen, private public protected, doppelter unterstrich php, private funktion, php funktion unterstrich, php private protected public, protected function php, php private unterstrich, php unterstrich funktion, \public $_\ ?, warum doppelter unterstrich in funktionsnamen, private protected, doppelter unterstrich bei funktionen php, funktion unterstrich

Alle Zeitangaben in WEZ +1. Es ist jetzt 15:21 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.