Nina: Gültigkeitsbereich einer Funktion

Hallo,

nachdem ich heute schmerzlich feststellen musste, dass Klassen immer GLOBAL sind, möchte ich nun zumindest innerhalb einer public-Funktion einer Klasse eine Funktion einbinden, die nur innerhalb dieser bestimmten Klassenfunktion verwendet werden darf; nicht in einer anderen Funktion der Klasse und auch nicht außerhalb der Klasse.
Zur Verdeutlichung dieses einfache Script:

<?
class test
{
 public function testfunktion()
 {
  function sehr_private_funktion()
  {
   echo "Ich darf nur in test->testfunktion verwendet werden; nicht aber in test->testfunktion2 oder gar ausserhalb der Klasse!!!<br>";
   return 1;
  }
  sehr_private_funktion();
 }
 public function testfunktion2()
 {
  sehr_private_funktion() OR die('Jetzt laeft der Hase richtig :)');
 }
}
$testklasse=new test();
$testklasse->testfunktion();
$testklasse->testfunktion2();
sehr_private_funktion() OR die('Jetzt laeft der Hase richtig :)');
?>
Ausgabe ==>
Ich darf nur in test->testfunktion verwendet werden; nicht aber in test->testfunktion2 oder gar ausserhalb der Klasse!!!
Ich darf nur in test->testfunktion verwendet werden; nicht aber in test->testfunktion2 oder gar ausserhalb der Klasse!!!
Ich darf nur in test->testfunktion verwendet werden; nicht aber in test->testfunktion2 oder gar ausserhalb der Klasse!!!

Demnach ist die Funktion überall deklariert :(

Wie kann ich diesen Gültigkeitsbereich einschränken?

Danke

  1. Hi,

    also dass eine Funktion nur innerhalb einer anderen Funktion Gültigkeit hat, kenne ich aus anderen Programmiersprachen nicht, außer JavaScript.

    weiß also nicht ob das in PHP möglich ist. Wenn du sie auf die Klasse beschränken willst, versuchs mit private function.

    Gruß1

    1. weiß also nicht ob das in PHP möglich ist. Wenn du sie auf die Klasse beschränken willst, versuchs mit private function.

      Sieht schlecht aus. Damit geht es auch nicht. das private lässt sich nur auf testfunktion oder testfunktion2 setzen, also auf Klassen-Funktionen, nicht aber auf "normale" Funktionen :(
      Hat sonst noch jemand eine Idee?

      1. Die einzige Situation, in der ich mir eine solche Konstruktion sinnvoll vorstellen könnte wäre, wenn Du einen synchronen Zugriff von anderen Methoden der Klasse verbieten möchtest; aber selbst das würde sich mit einer zusätzlichen "Sperr"-Variablen umsetzen.

        Also: Die "testfunktion" ruft eine andere, private Funktion der Klasse auf, deren erste Operation das Setzen des "gesperrt"-Zustandes ist (der am Ende der Methode wieder aufgehoben wird).

  2. echo $begrüßung;

    Demnach ist die Funktion überall deklariert :(
    Wie kann ich diesen Gültigkeitsbereich einschränken?

    Das geht nicht. Klassen und selbständige Funktionen sind immer global.

    Da PHP immer im Quelltext vorliegt, sind zum Beispiel auch Zugriffsmodifikatoren von Klassen (public, private, protected) nur als Vorschläge zu sehen, denn wenn der Endanwender das anders haben möchte, muss er ja einfach nur den Quelltext ändern. Deswegen sind Zugriffsmodifikatoren auch nicht als Sicherheitsfeature geplant.

    echo "$verabschiedung $name";