eigene Funktionen mit beginnendem Unterstrich - Sinn?
Eingetragen von quiptime (4972)
am 11.12.2007 - 21:37 Uhr in
am 11.12.2007 - 21:37 Uhr in
Generelle Frage zur Verwendung von Funktionsnamen mit beginnendem Unterstrich.
Beispiel:
<?php
function mymodule_getinfo(){
return _mymodule_getinfo();
}
function _mymodule_getinfo(){
$param = 'Ich bin eine Information.';
return $param;
}
?>
Um die Info zu erhalten spreche ich an:
<?php
print mymodule_getinfo();
?>
Den obigen Beispielcode trifft man als Prinzip oefters in verschiedenen Modulen an. Welchen Sinn macht diese Funktionskonstruktur mit der "Unterstrich-Funktion"?
-------------------------
quiptime
- Anmelden oder Registrieren um Kommentare zu schreiben
Gute Frage. Ich habe
am 11.12.2007 - 22:08 Uhr
Gute Frage. Ich habe versucht bei meinen Modulen folgende Konvention einzuhalten. Den beginnenden Unterstrich benutze ich für private Funktionen und den ohne für public. Ist nicht genau die Antwort auf deine Frage, aber meine Gedanken dazu.
___________________________
it's easier than you think
Raphael Schär
http://www.schaerwebdesign.ch
Facebook Gruppe Schweiz-CH: http://www.facebook.com/group.php?gid=5683015414
______________________________
Yet Another Drupal Site (YADS)
http://www.rapsli.ch
******************************
Funktionen mit _
am 11.12.2007 - 22:14 Uhr
PHP so wie es in Drupal verwendet wird, kennt keine privaten oder öffentlichen Funktionen. Deshalb wird über diese Namenskonvention versucht etwas ähnliches zu erreichen. Das funktioniert natürlich nur, wenn sich alle daran halten.
Eine Funktion mit einem _ am Anfang ist also für den internen Gebrauch innerhalb eines Moduls bestimmt. Der Modulentwickler kann bei einem Update '_mymodule_getinfo' in '_mymodule_get_ext_info' ändern und du brauchst in deinem Code nichst ändern, da du ja die 'öffentliche' Funktion 'mymodule_getinfo' benutzt.
Natürlich muss der Modulentwickler auch die Funktion 'mymodule_getinfo' entsprechend anpassen. Mit echtem OOP geht sowas alles eleganter.
vg
--
md - DrupalCenter
mdwp* :: Drupal Services
vg
md - DrupalCenter.de
mdwp* Drupal Consulting & Services
OOP Codebeispiel ?
am 11.12.2007 - 22:22 Uhr
Danke Dir md.
Mit echtem OOP geht sowas alles eleganter.
Koenntest Du das, von meinem Beipielcode ausgehend, als OOP Codebeispiel etwas genauer erklaeren?
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Objekte bestehen aus
am 11.12.2007 - 22:39 Uhr
Objekte bestehen aus Variablen und Methoden. Ein Grundsatz von OOP ist, dass Variablen nicht direkt angesprochen werden, sondenr über eine entsprechende Accessor Methode:
<?php
class MyObject{
private $name;
public function getName(){
return $this->name;
}
public function setName(string $str){
$this->name = $str;
}
}
?>
Warum das ganze? ein grosses Ziel von OOP ist die Modularisierung und die Wiederverwendbarkeit von Objekten zu erleichtern. Dies kann nur erreicht werden, wenn Schnittstellen von Objekten klar definiert sind:
<?php
$o = new MyObject();
$o->name = 'rapsli'; //no go!!!
$o->setName('rapsli'); //so, ists recht
?>
Mittels public/private kann erreicht werden, dass der direkte Zugriff auf die Variablen gar nicht möglich ist, da diese von ausserhalb des Objektes gar nicht gesehen wird.
Unser Objekt hat genau zwei Schnittstellen nach aussen: getName und setName. Wird die innere Struktur geändert, z.B. wird der name nicht mehr in einem String gespeichert sondern einem Array. Das ist dann kein Problem, da lediglich die Accessor Methoden verändert werden. Sind die Schnittstellen jedoch nicht klar definiert und es wird direkt auf die Variablen zugegriffen, so ist eine modulare Verwendbarkeit fast nicht möglich, da nicht klar ist, wo überall bereits ein Zugriff erfolgt, welcher beim Update in einer Fehlermeldung enden würde.
Ich hoffe, das Hilft ein wenig. Falls du dich mehr mit OOP befassen willst -> Java is the way to go.
___________________________
it's easier than you think
Raphael Schär
http://www.schaerwebdesign.ch
Facebook Gruppe Schweiz-CH: http://www.facebook.com/group.php?gid=5683015414
______________________________
Yet Another Drupal Site (YADS)
http://www.rapsli.ch
******************************
Pseudocode
am 11.12.2007 - 22:43 Uhr
Mit Pseudo code:
public darf_jeder_aufrufen(){
get_privateinfo();
}
private get_privateinfo(){
print 'Das kann jederzeit geändert werden und "darf_jeder_aufrufen()" bleibt immer gleich und bei updates aktuell';
}
An die OOP-Spezialisten: bitte nicht schlagen. Ich weiß, dass das sehr vereinfacht dargestellt ist.
vg
--
md - DrupalCenter
mdwp* :: Drupal Services
vg
md - DrupalCenter.de
mdwp* Drupal Consulting & Services
Wenn wir schon bei OOP sind.
am 11.12.2007 - 22:46 Uhr
Wenn wir schon bei OOP sind. Neuerdings geht ja auch folgendes:
<?php
class Test{
publich function foo(string $bar){
return $bar;
}
}
?>
Nur musste ich feststellen, dass das nicht überall klappt. Ab welcher Version geht denn das? Weil eine stärkere Typisierung würde ich sehr begrüssen...
___________________________
it's easier than you think
Raphael Schär
http://www.schaerwebdesign.ch
Facebook Gruppe Schweiz-CH: http://www.facebook.com/group.php?gid=5683015414
______________________________
Yet Another Drupal Site (YADS)
http://www.rapsli.ch
******************************
@rapsli
am 11.12.2007 - 22:56 Uhr
Ich war zu PHP 4 Zeiten, 5 gab es noch nicht, schon mal in PHP OOP eingestiegen. Nun moechte ich OOP mit PHP 5 reaktivieren.
@rapsli,
hast Du einen Link zu einem guten Tutorial?
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
schick mir mal deine e-mail
am 11.12.2007 - 23:02 Uhr
schick mir mal deine e-mail adresse per formular, kann dir was gutes schicken falls du was über OOP und Design Patterns mit PHP lernen willst.
OOP zwischen 4 und 5 sind Welten ;)
Das einzige was ich noch vermissen ist das überladen von Methoden... :(
___________________________
it's easier than you think
Raphael Schär
http://www.schaerwebdesign.ch
Facebook Gruppe Schweiz-CH: http://www.facebook.com/group.php?gid=5683015414
______________________________
Yet Another Drupal Site (YADS)
http://www.rapsli.ch
******************************
OOP/Drupal
am 11.12.2007 - 23:17 Uhr
Nur für Drupal bringt uns das alles erstmal nüschts :-( Auf der anderen Seite gibt es kein OOP-CMS, das an Drupal heranreicht. Und dem Endbenutzer/Kunden ist das alles eh wurscht.
vg
--
md - DrupalCenter
mdwp* :: Drupal Services
vg
md - DrupalCenter.de
mdwp* Drupal Consulting & Services
Jo, schon klar... aber ich
am 12.12.2007 - 00:15 Uhr
Jo, schon klar... aber ich mache zwischendurch auch noch nicht-drupal zeugs und da setze ich eigentlich wo immer möglich auf OOP und da ich von der Javawelt komme, weiss ich ungefähr, was noch alles möglich ist. Aber die 5er Version ist schon gut. ... und Drupal auch ;)
Falls es noch jemanden interessiert: http://rapsli.ch/drupal/blog/11.12.2007-oop-konzepte-drupal Ein bisschen ausführlicher
___________________________
it's easier than you think
Raphael Schär
http://www.schaerwebdesign.ch
Facebook Gruppe Schweiz-CH: http://www.facebook.com/group.php?gid=5683015414
______________________________
Yet Another Drupal Site (YADS)
http://www.rapsli.ch
******************************
Private Funktionen
am 12.12.2007 - 00:46 Uhr
Den beginnenden Unterstrich benutze ich für private Funktionen und den ohne für public.
Kann ich bestätigen. Meine Module rufen keine Funktionen anderer Module auf, deren Funktionsname mit einem Unterstrich beginnt.
Das einzige was ich noch vermissen ist das überladen von Methoden
Es gibt func_get_args. Leider fehlen (wie bei magischen Methoden) geeignete Dokumentationswerkzeuge.
aber ich mache zwischendurch auch noch nicht-drupal zeugs [...]
Verräter :-)
--
Hier der Hintergrund meiner Fragen.
am 12.12.2007 - 01:20 Uhr
Hier der Hintergrund meiner Fragen.
Erstes Ergebnis meiner Bemühungen, mich auf Drupal 6 einzuschießen.
Modul "GM simple": http://d6.quiptime.com/de/node/5
Noch ohne OOP. ;-)
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
traxer wrote: Verräter
am 12.12.2007 - 08:58 Uhr
Verräter :-)
...ich muss jedoch zugeben, dass ich ein wenig Mühe hatte am Anfang... all die Sachen, die man da berücksichtigen muss ;)
___________________________
it's easier than you think
Raphael Schär
http://www.schaerwebdesign.ch
Facebook Gruppe Schweiz-CH: http://www.facebook.com/group.php?gid=5683015414
______________________________
Yet Another Drupal Site (YADS)
http://www.rapsli.ch
******************************