2016-08-19 32 views
0

ich folgende Frage:Preprocessing wie "#if defined" in PHP

ich mit PHP eine SOAP-Server-Anwendung am Programmieren. Aber ich muss das auf zwei verschiedene Arten tun, eine für den externen Gebrauch (für alle Menschen) und eine, die nur für einen Import ist. Und die Import-Anwendung hat nur ein bisschen mehr Möglichkeiten, aber ansonsten ist es dasselbe.

In C würde ich so etwas wie dies (mit dem Prä-Prozessor) schreiben:

#ifdef INTERNAL 
int funktion(int ok, double asdfg, const char *aaa){ 
#else 
int funktion(int ok, double asdfg){ 
#endif 
    return 0; 
} 

Ich weiß, dass die Funktion defined() in PHP, aber es nicht wirklich tun, was ich tun möchte (glaube ich). Aber gibt es etwas Simolar?

Natürlich habe ich zwei verschiedene Anwendungen schreiben können, aber es wäre sehr schön, wenn es so etwas wie dieses ...

um Hilfe Danke war!

EDIT: Ich weiß, dass in der Regel ist es möglich, bedingte Funktionen wie

if(CST){ 
    function asdf($asdf){ 
    } 
} 
else{ 
    function asdf(){} 
} 

aber ich brauche es in der Klasse zu schreiben und es funktioniert es nicht ...

Mit freundlichen Grüßen!

+0

PHP ist nicht eine kompilierte Sprache. Solche Compiler-Direktiven gibt es nicht. Aber könnten Sie Ihr Bedürfnis erklären? Ist es wirklich zu entscheiden, ob man das 3. Argument hat oder nicht? Wenn ja, kann das anders gelöst werden. – trincot

+0

Nun, ich weiß, dass PHP nicht kompiliert wird. Aber ich hoffte, dass es einige Problemumgehungen gibt ... Es ist für etwas in der Art erforderlich: Für _normal_ Benutzer z. die 'function add()' hat 3 Parameter, aber für den Import brauche ich auch die Datenbank ID. Und in der Funktion muss ich die SQL-Anweisung erstellen. Normalerweise ist die ID auto_incrementiert, aber wenn sie gegeben ist ... "Wenn ja, kann das anders gelöst werden" Mit optionalen Parametern (wie 'Funktion hinzufügen ($ test, $ test2, $ asdf = NULL)'? Ich weiß, aber das ist nicht was ich brauche, denn der normale Benutzer darf nicht den dritten Parameter verwenden ... Aber danke für Ihre Hilfe – eisenbahnfan

+0

Nein, ich dachte nicht optionale Argumente.Sie können eine Funktion bedingt definieren , und so in zwei verschiedenen Signaturen, abhängig von dieser Bedingung – trincot

Antwort

0

In PHP gibt es keine solchen Vorverarbeitungskonstrukte, da PHP nicht kompiliert wird. In PHP können Klassen jedoch bedingt definiert werden. So könnte man dies in zwei Schritten tun:

  1. definieren die Klasse mit dem Full-Option (3. Argument), aber diese sensiblen Mitglieder als protected definieren statt public

  2. die Klasse bedingt erweitern und bietet Zugang an die protected Mitglieder über einen neuen Namen und mit der entsprechenden Signatur. Andere public Mitglieder müssen nicht explizit erwähnt werden, da sie wie gewohnt

Hier geerbt werden, ist ein Beispiel:

define('INTERNAL', false); 

// Define complete class, but with members set to protected 
// when they have constraints depending on INT/EXT access 
class _myClass { 
    protected function _funktion ($ok, $str, $id = -1) { 
     echo "arguments: $ok,$str,$id"; 
    } 
    public function otherFunc() { 
     echo "other func"; 
    } 
} 

// Define myClass conditionally 
if (INTERNAL) { 
    class myClass extends _myClass{ 
     // give public access to protected inherited method 
     public function funktion ($ok, $str, $id) { 
      $this->_funktion ($ok, $str, $id); 
     } 
    } 
} else { 
    class myClass extends _myClass{ 
     // give public access to protected inherited method, but only 
     // with 2 parameters 
     function funktion ($ok, $str) { 
      $this->_funktion ($ok, $str); 
     } 
    } 
} 


$obj = new myClass(); 

// if signature has 2 arguments, third is ignored 
$obj->funktion(1, 'test', 3); 
// other methods are availble 
$obj->otherFunc(); 
+0

Ja. Ich meine, es ist nicht wirklich die Lösung, die ich sehen wollte, aber es scheint die einzig mögliche zu sein ... Danke für alle! – eisenbahnfan

+0

Gern geschehen, und danke, dass du es angenommen hast ;-) – trincot