Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

eigene Funktionen mit beginnendem Unterstrich - Sinn?

Eingetragen von quiptime (4972)
am 11.12.2007 - 20:37 Uhr in
  • Modul-Entwicklung
  • Drupal 5.x oder neuer

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

‹ jQuery Datenübergabe eigenes Modul, eigene überschreibbare Funktionen erstellen? ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Gute Frage. Ich habe

Eingetragen von rapsli (1500)
am 11.12.2007 - 21: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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Funktionen mit _

Eingetragen von md (3717)
am 11.12.2007 - 21: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

  • Anmelden oder Registrieren um Kommentare zu schreiben

OOP Codebeispiel ?

Eingetragen von quiptime (4972)
am 11.12.2007 - 21:22 Uhr

Danke Dir md.

Zitat:

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.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Objekte bestehen aus

Eingetragen von rapsli (1500)
am 11.12.2007 - 21: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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Pseudocode

Eingetragen von md (3717)
am 11.12.2007 - 21: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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn wir schon bei OOP sind.

Eingetragen von rapsli (1500)
am 11.12.2007 - 21: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

  • Anmelden oder Registrieren um Kommentare zu schreiben

@rapsli

Eingetragen von quiptime (4972)
am 11.12.2007 - 21: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.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

schick mir mal deine e-mail

Eingetragen von rapsli (1500)
am 11.12.2007 - 22: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

  • Anmelden oder Registrieren um Kommentare zu schreiben

OOP/Drupal

Eingetragen von md (3717)
am 11.12.2007 - 22: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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Jo, schon klar... aber ich

Eingetragen von rapsli (1500)
am 11.12.2007 - 23: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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Private Funktionen

Eingetragen von traxer (1009)
am 11.12.2007 - 23:46 Uhr
rapsli schrieb

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.

rapsli schrieb

Das einzige was ich noch vermissen ist das überladen von Methoden

Es gibt func_get_args. Leider fehlen (wie bei magischen Methoden) geeignete Dokumentationswerkzeuge.

rapsli schrieb

aber ich mache zwischendurch auch noch nicht-drupal zeugs [...]

Verräter :-)

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hier der Hintergrund meiner Fragen.

Eingetragen von quiptime (4972)
am 12.12.2007 - 00: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.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

traxer wrote: Verräter

Eingetragen von rapsli (1500)
am 12.12.2007 - 07:58 Uhr
traxer schrieb

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • Inzwischen sind wir bei
    vor 1 Tag 3 Stunden
  • Migrieren von D7 auf D8/ D10/ D11
    vor 1 Tag 19 Stunden
  • melde mich mal wieder, da ich
    vor 7 Wochen 5 Tagen
  • Hey danke
    vor 7 Wochen 6 Tagen
  • Update: jetzt gibt's ein
    vor 8 Wochen 12 Stunden
  • Hallo, im Prinzip habe ich
    vor 8 Wochen 4 Tagen
  • Da scheint die Terminologie
    vor 8 Wochen 5 Tagen
  • Kannst doch auch alles direkt
    vor 9 Wochen 2 Tagen
  • In der entsprechenden View
    vor 9 Wochen 2 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 10 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association