[PHP] Allgemeine Fragen



  • 1. Dynamische Variablen

    $dyn_var = "rofl";
    $rofl = "bla";
    
    echo $$dyn_var -> Ausgabe: bla
    

    Soweit so gut. Nur was erreicht man mit dieser Form:

    echo "$dyn_var ${$dyn_var}";
    

    Wieso kommt da als Ausgabe auch bla?

    2. Der "."-Operator bei Zahlen

    $z1 = 5;
    $z2 = 6;
    

    Wir aus z1.z1.z2 nun 56 oder 5.6?

    3. Wieso ist der "++"-Operator und der "--"-Operator anders als in C/C++ wenn PHP sich angeblich nahe an der C-Synthax hält?

    4. Ist es möglich per define Konstanten auch zur Laufzeit zu initialisieren. Wenn ja ist das guter Stil?

    5. String-Konstanten habe ich in meinem Buch nun öfters schon mit einfachen und mit doppelten Anführungszeichen gesehen. Gibt es da irgendeine Regel oder sind da beide Arten möglich?

    6. Muss ich _sleep() und _wakeup() selbst definieren oder serialize und unserialize? Das kommt da nicht so ganz durch.

    MfG SideWinder



  • Achja und

    7. Unterschied zwischen echo und print? Wann nimmt man welche Form, nach welchen Stilregeln geht das? Warum sieht man echo manchmal mit Anführungszeichen manchmal ohne?

    8. Welche dieser beiden Formen ist richtig:

    // 1:
    
    if ( $page == "home" )
    {
        ?>
        <p>
        HOME ""
        </p>
        <?php
    }
    else
    {
        ?>
        <p>
        Andere HTML-Ausgabe ""
        </p>
        <?php
    }
    
    // 2:
    if ( $page == "home" )
    {
        echo "<p>HOME! /"/"</p>";
    }
    else
    {
        echo "<p>Andere HTML-Ausgabe /"/" </p>";
    }
    

    Oder sind hier wiederrum beide gleichwertig?

    MfG SideWinder



  • hmm.. ma schaun

    2. je nachdem wie du es tippst:
    echo "z1.z1.z2" erzeugt 5.6
    echo z1.z1.z2 erzeugt 56
    echo 'z1.z1.z2' erzeugt z1.z1.z2

    3. wieso anders?

    5. siehe 2, bei "" werden Sonderzeichen wie \n \r \\ \" sowie Variablen umgewandelt, bei '' kommt alles exakt so an wie du es getippt hast

    echo kann
    echo "ab","cd","ef"; also mehrere Strings mit komma getrennt ausgeben
    print kann das nicht... wo der Vorteil gegnüber echo "ab"."cd"."ef"; liegt weissich aber auch nicht 🙄

    Und zu den Klammern sagt die PHP Referenz
    "echo() ist keine Funktion, sonder ein Sprach-Konstrukt. Deshalb brauchen Sie keine Klammern zu verwenden. "
    Wenn man echo mit , benutzen will DARF man sogar keine nehmen

    8. legal ist beides, was besser ist ist Geschmacks- und Situationssache
    Ich persönlich bevorzuge es html und php NICHT so zu mixen weil ich da sonst durcheinander komme 😃

    [ Dieser Beitrag wurde am 19.06.2003 um 13:51 Uhr von dreaddy editiert. ]



  • 1.) die geschweiften Klammern sind hauptsächlih wichtig, wenn es um dyn. Variablen in Verbindung mit Array o.ä. geht, damit die Zuordnung eindeutig ist:

    ${$test[0]} bzw. ${$test}[0]
    

    2.) Bei PHP werden Variablen automatisch in den erwarteten Typ umgewandelt, sodass hier aus den Zahlen Strings werden -> es kommt 56 heraus (bei echo "z1.z1.z2"; wird natürlich 5.6 ausgegeben, da hier der Punkt nicht als Verkettungsoperator verwendet wird

    3.) Davon weiß ich noch gar nicht's 🙄 - inwiefern soll er denn anders sein?

    4.) Was verstehst du unter "zur Laufzeit initialisieren"? In PHP ist doch eigentlich alles in gewisser Weise "zur Laufzeit"
    Zitat aus der PHP-Doku, falls du sowas meintest:

    Eine Konstante nicht umdefiniert oder zurück gesetzt werden kann, wenn sie einmal gesetzt wurde und

    5.) Was sind String-Konstanten und wo waren da doppelte Anführungszeichen?

    6.) Ich kenne sleep, serialize und unserialize und das sind fertige PHP-Funktionen, aber wakeup sagt mir jetzt nicht's (hab's auch net in der Doku gefunden)

    7.) Die "" oder '' brauchst du ja nur, wenn du einen String ausgeben willst. Gibst du eine Variable aus, brauchst du keine Anführungszeichen. du kannst zwar "" außenrumsetzten, ist aber geschwindigkeitstechnisch schlechter, da es dann erst noch geparst werden muss.
    Bei echo steht in der Doku folgendes:

    // echo ist keine Funktion, weshalb der folgende Code ungültig ist.
    ($some_var) ? echo('true'): echo('false');
    
    // Aber folgende Beispiele funktionieren:
    ($some_var) ? print('true'): print('false'); // print ist eine Funktion
    echo $some_var ? 'true': 'false'; // Das Statement herumgedreht
    

    Aber bei print steht auch

    ist eigentlich keine wirkliche Funktion (sie ist ein Sprachkonstukt)

    Vielleicht kommt es hier auf eigentlich und wirklich an 😕 🙄

    8.) Richtig ist so wie du es gepostet hast nur die erste, da du in Zeichenketten in "" das Anführungszeichen mit einem \ maskieren musst, du hast aber komischerweise / benutzt 😕
    Ansonsten gilt weiterhin, dass Zeichenketten in '' schneller sind, da sie nicht geparst werden müssen. Daher würde ich das ganze so schreiben:

    if($page == "home") {
     echo '<p>HOME! ""</p>';
    }
    else {
     echo '<p>Andere HTML-Ausgabe "" </p>';
    }
    

    Wenn du längere Bereiche hast, die ausschließlich HTML-Text sich kannst du auch den PHP-Bereich wie in Mgl1 unterbrechen (wie es hier geschwindigkeitsmäßig aussieht weiß ich nicht)
    Vielleicht noch ganz interessant dazu: http://www.php.net/manual/de/language.types.string.php



  • zu 1.) Ja aber oben müsste die Variable doch 2 Mal ausgegeben werden?

    zu 2.) Okay

    zu 3.)

    // C++:
    
    i = 5;
    j = 5;
    
    i = ++j; // Nun sollte i 6 sein
    i = j++; // Nun sollte i 5 sein
    
    // Und in PHP (laut Buch):
    
    $j = 12;
    $i = 3;
    
    echo $i = $j++; /* Nun sollte 13 ausgegeben werden - ist das weil j ausgegeben
    wird oder sind da die Operatoren anders? */
    

    zu 4.)
    define ( "Konstante" , "$rofl" ); <- ist das möglich oder nur:
    define ( "Konstante" , "5" ); <- oder nur das hier? Weil zuerst nach defines gesucht wird und die ersetzt werden?

    zu 5.)
    Manchmal war da zu finden:
    GLOBALS["b"] und manchmal: GLOBALS['b']

    Dann gabs da noch:

    echo "bla" und echo 'bla' etc.

    zu 6.)

    _sleep ()

    Diese Methode wird von serialize() aufgerufen - vorausgesetzt sie existiert. Sinn und Zweck ist es [...] sanft "in den Schlaf zu wiegen" bevor sie gelöscht werden [...] um zB offene Datenbankverbindungen noch zu schließen. Als Gegenstück existiert _wakeup ()

    Da hier was von "vorausgesetzt sie existiert" steht dachte ich, ich muss die in meiner Klasse selbst definieren?

    Weiters weiß ich nicht was serialize() ist 😃

    zu 7.) Aha. Also ob nun echo oder print ist wohl nicht ganz klar :D. Naja ich bleib dann bei echo - obwohl ich per PHP sowieso nur selten etwas ausgebe...

    Naja: Wird Text der per echo ausgegeben wird "normal" ausgegeben oder mit Bezug auf den derzeitigen Style im HTML?

    zu 8.) Also grundsätzlich echo mit '' statt "". Und bei längeren Bereichen Mgl1. Das mit dem / statt \ war ein Fehler meinerseits :D.

    Danke vorerst.

    MfG SideWinder



    $i = 12;
    $j = 4;
    
    $i++;
    // oder
    $i = $i++;
    
    echo("Blabla");
    print "Blabla";
    // oder
    $bla = "Blabla";
    printf("%s", $bla);
    


  • 1.) Was meinst du sollte ausgegeben werden? 🙄
    echo "$dyn_var {dyn_var}"; -> rofl bla
    echo "$dyn_var $$dyn_var"; -> rofl $rofl

    3.) Ich würde eher denken, dass i ausgegeben wird (es wir 12 ausgegeben - nicht 13)
    Also $j wird $i zugewiesen, $j erhöht und wohl $i (evtl. auch $j vor dem erhöhen) ausgegeben

    4.) es ist beides möglich! - warum probierst du sowas nicht einfach aus 😕

    5.) ist ja eigentlich bei 8.) schon erklärt

    6.) sorry, verstehe ich nicht - hab auch noch nie etwas davon gehört und in der Doku ist nichts darüber zu finden
    Um Hilfe zu Funktionen zu erhalten kannst du einfach in die Doku schauen: www.php.net/serialize
    Die Funktion wandelt unterschiedliche Datenstrukturen (z.B. Arrays) in einen String um, welcher dann z.B. in einer Datei oder DB gespeichert werden kann. Mit unserialize wird dann dieser String wieder in den ursprünglichen Datentyp zurückgewandelt.

    7.) was machst du denn dann in PHP, wenn du nichts ausgib´st 😕
    Was verstehst du unter "Bezug auf den derzeitigen Style im HTML"? Der Text wird halt einfach an dieser Stelle ausgegeben - du kannst dir ja einfach mal im Browser den Quelltext anschauen 😉

    8.) So ganz pauschal würde ich das nicht sagen - oder sagen wir es so: manchmal ist es mit "" halt komfortabler

    echo '<img src="'.$img['src'].'" width='.$width.' height='.$height.' alt="'.$img['alt'].'">';
    echo "<img src='{$img['src']}' width=$width height=$height alt='{$img['alt']}'>";
    

    Schneller ist '' aber - nur vielleicht manchmal ist "" eben praktischer bzw. übersichtlicher (auch wenn es in meinem Bsp. vielleicht nicht deutlich wurde 😃 )



  • zu 1.) Oh 🙄

    zu 3.) *Buch in die Ecke schmeiß* was hab ich mir den da gekauft? Also die behaupten 13...

    Naja also dann sind die Operatoren ja eh gleich wie in C/C++.

    zu 4.) Weil ich extrem Faul bin 🙄

    zu 5.) Okay

    zu 6.) *Wieder Buch in die Ecke schmeiß* was soll die Funktion dann bringen? Sie wird auch nirgends mehr im Buch erwähnt.

    zu 7.) Ich meinte ich gebe nichts per echo aus. Sondern immer per ?>bla<?php.

    zu 8.) Egal ich nehme statt echo/print doch wieder ?>bla<?php soviel Geschwindigkeitsunterschied wird da hoffentlich nicht sein :). Und wenns um Speed geht dann nimmt man '' also braucht man "" letzten Endes doch wieder nicht 😕😃

    MfG SideWinder



  • 7.) Was bringt dir denn dann PHP überhaupt? Gut include vielleicht, aber wenn du keine Variablen ausgibst (geht ja mit ?>bla<?php wohl schlecht) kannst du ja nicht viel machen

    8.) Für Escape-Sequenzen (z.B. \r, \n) brauchst du ""
    siehe hierzu wieder (hab ich oben schon gepostet): http://www.php.net/manual/de/language.types.string.php



  • was hast du eigentlich für ein Buch, dass da so komische Sachen drinstehen? 😕 🙄



  • Sorry, hab mich wohl getäuscht 🙄
    Ich hab jetzt nämlich nochmal google bemüht und habe in der PHP doku (Link war in einem Treffer enthalten) was gefunden: http://www.php.net/manual/de/language.oop.magic-functions.php



  • Dynamische Variablen sind Dreck, in nem anständigegen Skript sollte man die net benutze.



  • Ich hab eigentlich auch noch nie eine sinnvolle Verwendung dafür gehabt 😉



  • @flenders: Ich werte derzeit mit PHP nur aus und gebe dann je nachdem Text aus. Die Variable selber aber meistens nicht ;).

    Mein Buch ist in der Tat etwas komisch...
    http://www.sybex.de/index.php/buecher/programmierung_datenbank/php/07322/

    Ich bestelle ab jetzt NUR noch über Amazon - hätte ich bloß vorher die Kritik dort gelesen 😞
    http://www.amazon.de/exec/obidos/ASIN/381557322X/qid=1056043206/sr=2-2/ref=sr_aps_prod_2_1/302-7260288-5610438

    *omg*

    MfG SideWinder



  • Achja: Danke der Link ist gut zu gebrauchen. Aber hat jemand schon mal diese :__sleep()-Funktion benützt?

    Was in meinem Buch leider auch nicht erklärt wird: Was ist serialize() und unserialize()? Laut PHP-Hilfe liefert es einen speicherbaren String eines Objekts.

    Wenn es wirklcih _sleep() vorher ausführt klingt diese Kombi ja ganz gut - immerhin kann ich dann bevor ich den String zum Abspeichern bekomme DB-Verbindungen, etc. schließen.

    Nur wohin speichere ich mein Objekt? Letzten Endes ja wieder in eine DB?!

    BTW: Zwei Unterstriche vor sleep()! In meinem Buch ist es wiedermal nur einer... In meinem PHP-Handbuch habe ich nach __sleep() gesucht. Bringt mich auf Anhang H Reservierte Schlüsselwörter in PHP (ürbigens gibt es auch __wakeup()!). Will ich allerdings dort weiterführende Informationen komm ich auf eine Seite wo steht "missing stuff" :D.

    MfG SideWinder


  • Mod

    Original erstellt von Lars:
    Dynamische Variablen sind Dreck, in nem anständigegen Skript sollte man die net benutze.

    also wir machen immer ganz geile dinge damit.
    wenn man sie zu nutzen weiss, sind sie sehr maechtig - vorallem im zusammenhang mit templates.



  • @SideWinder: __sleep und __wakeup werden doch beide auf der von mir genannten Seite erklärt. Bei den Anmerkungen (2. von unten) ist auch ein gutes Beispiel dafür, wie das ganze Funktioniert.
    Du kannst mit diesen Funktionen z.B. halt auch sagen, was alles gespeichert werden soll. Außerdem kannst du halt z.B. in __wakeup beispielsweise LDAP, oder sonstige Verbindungen wiederherstellen - ist also sicher manchmal ganz praktisch.



  • @Shade: Hast du da vielleicht ein gutes Beispiel? Dann würde ich denn Sinn vielleicht eher verstehen ;).

    MfG SideWinder


  • Mod

    Original erstellt von SideWinder:
    **@Shade: Hast du da vielleicht ein gutes Beispiel? Dann würde ich denn Sinn vielleicht eher verstehen ;).
    **

    zB du liest ein template ein:

    <%person.surname%>

    dies geht dann einfach, indem du dann
    obj>obj->name()

    schreibst - und schon rufst du surename auf - das hat den vorteil, dass du keine switch und so weiter brauchst und es ist leicht erweiterbar ohne den kern code anfassen zu muessen.

    oder callbacks kann man damit auch gut realisieren...

    aber klar, fuer standard anwendungen braucht mans nicht - mir ist nur die aussage, das sie dreck seien auf die nerven gegangen... denn nur weil jemand mit einem feature nix anfangen zu weiss, muss es doch lange nicht schlecht sein (siehe C++ Temaplates)


Anmelden zum Antworten