PHP - () + {}

  • Hey,


    ich verstehe es immer noch nicht warum () und {} eingesetzt werden im unten gezeigten Beispielen:


    Beispiel mit {} (Wo diese Klammern umrum von variablen sind):

    PHP
    echo {$name} ;

    Beispiel mit () (Wo diese Klammern bei statements oder auch anderen sachen sind) :

    PHP
    Beispiel 1:
    
    if(!isset( ($_POST['test'] && strlen $_POST['test'] === 0)) || empty( ( ($_POST['test'] ) )  ){
        echo "Testing";
    }
    
    Beispiel 2:
    $ergebnis = ($a + $b) - $c * $d;


    Für was benutzt man denn die ? Auch weitergegreift als auf dies Beispiele bitte.


    Vielen Dank.


    Stef

  • EDIT: ich merke gerade wieder, dass ich mit dem neuen Forumeditor nicht klar komme. :(



    Die Klammen () beeinflussen die Reihenfolge von Statements.

    Ablauf an Deinem Bsp $ergebnis = ($a + $b) - $c * $d

    Info: PHP verarbeitet Statements von rechts nach links.


    - zu erst wird c * d ausgeführt

    - das Zwischenergebnis daraus soll von links subtrahiert werden aber -

    - durch die () Klammen wird als nächstes a + v ausgeführt

    - zum Schluss wird rechts von links subtrahiert.


    Zum $_POST -Bsp:

    in dem Bsp sind die Klammern fehlerhaft.

    Fixed:

    PHP
    if(     (         !isset($_POST['test']) && strlen($_POST['test']) === 0
        )     || empty($_POST['test'])
    ){
        echo "Testing";
    }

    empty() macht hier keinen Sinn, irgendwie. Man will ja, dass es gesetzt ist, und länger als 0.

    Also if ( isset($_POST['test']) && strlen($_POST['test']) > 0 ) {}


    Die {} Klammern kann ich nicht erklären. Mir fällt da gerade echt nicht ein, wie man das erklärt :D

    Genutzt werden die jedenfalls oft in Ausgaben - zB HTML.

    PHP
    $person = array();
    $person['name'] = 'cottton';
    echo "In doppelten Anführungszeichen wird Code ausgefürt. Deshalb kann ich meinen Namen einfügen: {$person['name']}";

    Ohne Klammern würde PHP das ganze nicht verstehen.


    Wichtiger werden die Klammern aber bei variablen variablen (http://php.net/manual/de/language.variables.variable.php)

    Oder zB bei Methodenaufruf per variable:

  • Hey,


    aso ok. Ja das mit dem if-statement habe ich mir einfach so ausgedacht (braucht kein sinn zu machen). Sollte nur zur Erklärung dienen.

    Also wird wenn man die ()-Klammern um z.b. eine array zuweisung macht dies zuerst ausgeführt und dann mit dem Code welcher rechts steht "verarbeitet/vergleicht".

    Zitat
    PHP
    $person = array();
    $person['name'] = 'cottton';
    echo "In doppelten Anführungszeichen wird Code ausgefürt. Deshalb kann ich meinen Namen einfügen: {$person['name']}";

    Ohne Klammern würde PHP das ganze nicht verstehen.


    Warum würde ohne die {} PHP es nicht verstehen ? Verstehe ich nicht.


    PHP
    $result = $object->{$array['method']}();

    Warum ist es da denn wichtig ?

  • Warum würde ohne die {} PHP es nicht verstehen ? Verstehe ich nicht.

    Ohne {} bekommst Du einen syntax error.


    Warum ist es da denn wichtig ?

    "Array to string", da $object->$array ausgeführt werden würde.

    Durch die {} wird zuerst die value aus dem array geholt.



    BTW: wähle mal auf PHP.net http://php.net/manual/en/language.variables.variable.php die Sprache "english" aus. Da gibts oft mehr Beispiele.

  • Hi,


    habe es mir nochmal angeschaut im php handbuch aber ich verstehe das immer noch nicht so richtig.


    Was ich verstanden habe ist, dass wenn man nun paar vairbalen hat, dass man dann mit mehreren dollar zeichen auf dden Wert der nächsten zugreifen kann.


    Habe dies mal selbst ausprobiert aber da kommt immer folgender Fehler (Getestet in Sandbox):

    <b>Notice</b>: Undefined variable: test in <b>[...][...]</b> on line <b>14</b><br />


    Das Script:

    PHP
    $b = "test";
    $c = "test1";
    $f = "test2";
    
    echo $$b; 

    Warum tritt der Fehler da auf ?? sollte nun $$b nicht test1 ausgeben ?


    Habe meins auch mit anderen beispielen verglichen sehe aber keine unterscheidungen bis auf die individuellen variablennamen und werte.


    Zum { } :


    Warum kommt denn da die Fehlermeldung ? Man greift doch auf den wert vom key method zu. Verstehe ich nicht.

  • Warum kommt denn da die Fehlermeldung ? Man greift doch auf den wert vom key method zu. Verstehe ich nicht.

    Weil der syntax nicht stimmt. Bei arrays müssen eben die Klammern genutzt werden :)



    echo "\$b value: '{$b}'\r\n";

    Output: $b value: 'test'


    $$b (besser lesbar ${$b}) bedeutet also $test

    und $test ist nicht definiert.


    Im Grunde sagst Du

    $ ich will eine variable

    deren Name in $b steck.



    Das hier sieht irre aus, ist aber eigtl ganz einfach:

    PHP
    $b = "test";
    $c = "test1";
    $f = "test2";
    $test = 123;
    
    echo "\$b value: '{$b}'\r\n";
    
    echo "\${\$b} value: {${$b}}";

    die $ sind mit Backslash maskiert, um sie ausgeben zu können.

  • Hey,


    achso.. Jetzt habe ich es mal mit den $ kappiert. Wenn man nun variablen mit werten hat. Wird der Wert wenn man 2 Dollar Zeichen benutzt zu einer Variable.


    Nochmal zu den klammern { } hier:


    - Wenn man diese um die variable schreibt, wird zuerst der Wert in der Variable geladen. Macht doch aber kein Sinn. Oder Wie ? Versteh es immer noch nicht so richtig.

  • Du könntest das mit array vergleichen:

    Ist jetzt nicht wirklich das gleiche, aber zeigen, dass es halt nur um die value geht, die in der Variable steckt.

    Wenn man diese um die variable schreibt, wird zuerst der Wert in der Variable geladen

    Ja, so kann man es sehen.

    Klammern sollte man immer verwenden. Liest sich besser und Fehler werden vermieden.

    Bsp:

    echo ${$myClass->getVarName()}; holt erst den Namen aus der Klassenmethode, und erstellt dann die variable.


    Und da geht noch mehr: Bedingungen

    PHP
    $auto = 'VW';
    $varName = null;
    echo ${isset($varName) ? $varName : 'auto'}; // VW

    $varName ist nicht gesetzt (NULL).

    Wir wollen eine Variable ausgeben.

    Der Name der Var steckt endweder in $varName, oder es wird "auto" genutzt.


    Man muss das nicht verwenden. Sollte es mal gesehen haben.

    Ich persönlich nutze es öfter mal zB bei Schleifen.

    Bsp

  • Hey,


    Dies ist ja genial mit den Schleifen. Finde ich gut :)


    Noch ne Frage:


    Code (wo du gepostet hast):

    PHP
    echo $$myClass->getVarName(); // Fatal error: Uncaught Meets\Service\Error\ErrorException: Object of class MyClass could not be converted to string
    echo ${$myClass->getVarName()}; // VW

    Warum kommt bei echo $$myClass-getVarName(); der Error? Der sagt , dass das Objekt von der klasse myclass nicht zu einem String formatierbar ist. Das Heißt diese variable gibt nur den String aus. Aber warum denn das, wenn zwei $$ davor stehen ?

  • $ baucht hier einen String. Aber ohne Klammern bekommt $ die Klasse $myClass.

    Und die Klasse kann nicht als String verwendet werden.


    Mit Klammern wird erst das Ergebnis aus $myClass->getVarName() geholt - was ja dann auto ist.

    Daraus entsteht $auto.


    Aber warum denn das, wenn zwei $$ davor stehen

    Du siehtst das wahrscheinlich immernoch falsch :D

    $$ ist keine einzelne Anweisung o.ä.

    Das sind 2 Sachen die hier passieren:

    erste $ -- hier wird es um eine Variable gehen

    zweite $ -- hier wird es wieder um eine Variable gehen


    Mir ist gerade das Konstanten Bsp eingefallen - hier wird es glaub ich deutlicher:

    PHP
    $auto = 'VW';
    define('VAR_NAME', 'auto');
    echo $VAR_NAME; // Undefined variable: VAR_NAME
    echo ${VAR_NAME}; // VW

    Wie bisher wollen wir die Value von $auto. Der Name der Variable kommt dieses Mal aus der Konstante VAR_NAME.

    Und hier zeigt sich, wie wichtig Klammern sind:

    ohne Klammern geben wir fälschlicher Weise an, eine Variable $VAR_NAME aufzurufen.


    Mit Klammern wird erst die Value aus der Konstante geholt.


    Keine 2 x $$. Das existiert eigentlich gar nicht. :)

  • Hey,


    asooooo ok. Also wenn man die {} Klammern um den variablennamen platziert dann wird erst der wert aus der value/konstante/.. gelesen und dann wird aus dem wert aufgrund des $ eine Variable ?


    Vielen Dank für die ausführliche Erklärung.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!