Ankündigung

Einklappen
Keine Ankündigung bisher.

Operatoren: drei mal ist gleich

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Peter0308
    antwortet
    AW: Operatoren: drei mal ist gleich

    Hi,

    PHP-Code:
    Aber hast Du auch eine Erklärungwarum
    PHP
    -Code:
    $a=1$b=2
    echo 
    '.'.$a+$b.'.'
    2.1.
    ergibt
    Diese Ausgabe ist absolut korrekt und auch logisch nachvollziehbar.

    PHP-Code:
    $var '.'// "."
    $var .= $a// ".1"
    $var += $b// "2"  falsch!  Hier wandelt PHP den Inhalt der Variable $var in eine Zahl um (float) als Ergebnis entsteht 0.1 (der Punkt wird als Dezimalzeichen gewertet). Zu dieser Zahl wird der Inhalt von $b addiert. Ergebnis: 2.1 
    $var .= '.'// "2." falsch! Hier wird aus der Zahl wieder ein String gemacht, indem ein Punkt angefügt wird. Ergebniss: "2.1."
    echo $var// "2.1." ??? 
    Ich hoffe, die Erklärung ist ausreichend.

    Peter

    Edit:
    Der gleiche Fehler ist in dem Beispiel von Brain vorhanden, nur, das bei der Umwandlung eines Strings in eine Zahl immer als Ergebnis 0 herauskommt, sofern der String nicht mit einer Zahl anfängt.
    Zuletzt geändert von Peter0308; 10.10.2007, 10:54.

    Einen Kommentar schreiben:


  • mi-schi
    antwortet
    AW: Operatoren: drei mal ist gleich

    Danke Ingo, das mit den Kommas werde ich auch einsetzen. Ist nicht schlecht.
    Also langsam wird es logisch. Mit den Punkt, bei deinem Beispiel Ingo, ich denke mal da interpretiert PHP die Punkt auch noch und zwar nicht als String-Punkt.

    PS: @Ingo schau mal nach deinen E-Mails...

    Einen Kommentar schreiben:


  • Ingo
    antwortet
    AW: Operatoren: drei mal ist gleich

    Hi,
    Zitat von mi-schi Beitrag anzeigen
    Das man eine Stringverkettung auch mit einem , (Komma machen kann) wusste ich gar nicht.
    das kann man auch nicht, sondern der echo-Befehl läßt mehrere Parameter zu. genauso wie Du
    global $a, $b;
    schreiben kannst, geht auch
    echo $a, $b;

    Im Unterschied zu
    echo $a.$b;
    muss nicht erst ein String zusammen gesetzt werden, sondern jeder Parameter wird einfach direkt ausgegeben, was eine (vermutlich kaum meßbare) Zeitersparnis bringen könnte.

    Gruß
    Ingo

    Einen Kommentar schreiben:


  • Ingo
    antwortet
    AW: Operatoren: drei mal ist gleich

    Hi,
    Zitat von Brian Beitrag anzeigen
    iedit: also folgender string wird von php so interpretiert, weil . und + dieselbe reihenfolge haben:
    danke für die logische Erklärung der Unlogik.
    Aber hast Du auch eine Erklärung, warum
    PHP-Code:
    $a=1$b=2
    echo 
    '.'.$a+$b.'.'
    2.1.
    ergibt?
    PHP-Code:
    $var '.'// "."
    $var .= $a// ".1"
    $var += $b// "2"
    $var .= '.'// "2."
    echo $var// "2.1." ??? 
    Mir scheint, dass PHP mit den "." in Strings und als Operator hier völlig ducheinander kommt.

    Gruß
    Ingo
    Zuletzt geändert von Ingo; 10.10.2007, 06:42.

    Einen Kommentar schreiben:


  • Brian
    antwortet
    AW: Operatoren: drei mal ist gleich

    und ich muss mich - malwieder - korrigieren. kommt davon wenn man seine beispiele nicht ausprobiert....

    also

    PHP-Code:
    $string='22a';
    $int=2;
    echo 
    $string+$int
    ergibt 24. wohingegen

    PHP-Code:
    $string='a22';
    $int=2;
    echo 
    $string+$int
    2 ergibt....also werden nur die zahlen berücksichtigt, bis ein zeichen kommt, das keine zahl ist....

    Einen Kommentar schreiben:


  • mi-schi
    antwortet
    AW: Operatoren: drei mal ist gleich

    Ach so, jetzt habe ich es verstanden.

    Doch nicht:

    $a=1; $b=2;

    $var='Punkt-';
    $var.=$a; # ergibt 'Punkt-1';
    $var+=$b; # ergibt 3
    $var.='-Punkt'; # ergibt '3-Punkt'

    PHP sagt aber "2-Punkt", deine Erklärung war aber logisch :-)


    Edit (autom. Beitragszusammenführung):

    Und ich weiß auch warum, weil ein String einen Integer von 0 hat, wie ihr oben schon geschrieben habt ("last" == 0). Dann wird es logisch
    Also, PHP sucht nicht nach der ersten Zahl, sondern gibt als Integer für einen String 0 aus.
    Darum funktioniert auch '0' und ==, weil PHP die Null als String ansieht.
    Und bei get_url_get(0) und if ($handle == "last") gibt er auch TRUE aus. Doch verstanden...
    Zuletzt geändert von mi-schi; 09.10.2007, 22:33. Grund: Antwort auf eigenen Beitrag innerhalb von 24 Stunden!

    Einen Kommentar schreiben:


  • Brian
    antwortet
    AW: Operatoren: drei mal ist gleich

    Zitat von mi-schi Beitrag anzeigen
    Also bin ich hier auf die Grenzen von PHP gestoßen?
    nein auf die ganz speziellen eigenarten von php

    PHP-Code:
    Das Beispiel von dir Ingo ist gutich dachte immerein . (Punktbedeuteteinfach Stringverkettunganscheinend doch nichtPHP macht ja da total unsinnige SachenDas man eine Stringverkettung auch mit einem , (Komma machen kannwusste ich gar nicht
    hab ich grad geschrieben, wahrscheich haben wir aber etwa gleichzeitig, geschaut...

    php macht bei

    PHP-Code:
    $a=1$b=2;
    echo 
    'Punkt-'.$a+$b.'-Punkt'
    das hier, weil . und + dieselbe rangfolge haben

    PHP-Code:

    $a
    =1$b=2;

    $var='Punkt-';
    $var.=$a;
    $var+=$b;
    $var.='-Punkt'

    echo 
    $var
    was, durch die typen vermischung von php in den komischen ergebnissen resultiert.

    Soll ich es jetzt also doch wieder mit drei ist gleichs und get_url_get(0); machen?

    Um ganz ehrlich zu sein, so richtig verstehe ich es aber noch nicht.
    Wie kann man den PHP sagen, was ein String und was ein Integer ist?
    du solltest generell nur === benutzen. dann tut php auch das was du erwartest.

    Wie kann man den PHP sagen, was ein String und was ein Integer ist?
    du kannst alles selbst umwandeln:

    PHP-Code:
    $var=(int)'asdf'#ergibt 0
    $var=(bool)NULL#ergibt FALSE
    $var=(string)0#ergibt '0' 
    jetzt haben wirs aber....lol

    Wird durch das += der String $var von Anfang an überschrieben?
    nein, wie vorher gesagt:

    PHP-Code:
    $string='a22a'
    $integer=2
    echo 
    $string+$integer#ergibt 4 
    ergibt 4, weil php nur nach der ERSTEN zahl sucht. in dem beispiel also:

    PHP-Code:
    $a=1$b=2;

    $var='Punkt-';
    $var.=$a;        # ergibt 'Punkt-1';
    $var+=$b;       # ergibt 3
    $var.='-Punkt'# ergibt '3-Punkt' 
    gruß
    Zuletzt geändert von Brian; 09.10.2007, 22:04.

    Einen Kommentar schreiben:


  • mi-schi
    antwortet
    AW: Operatoren: drei mal ist gleich

    Also bin ich hier auf die Grenzen von PHP gestoßen?
    Das Beispiel von dir Ingo ist gut, ich dachte immer, ein . (Punkt) bedeutet, einfach Stringverkettung, anscheinend doch nicht. PHP macht ja da total unsinnige Sachen. Das man eine Stringverkettung auch mit einem , (Komma machen kann) wusste ich gar nicht.

    Soll ich es jetzt also doch wieder mit drei ist gleichs und get_url_get(0); machen?

    Um ganz ehrlich zu sein, so richtig verstehe ich es aber noch nicht.
    Wie kann man den PHP sagen, was ein String und was ein Integer ist?


    Edit (autom. Beitragszusammenführung):

    edit: also folgender string wird von php so interpretiert, weil . und + dieselbe reihenfolge haben:

    PHP-Code:
    $a=1; $b=2;

    echo
    'Punkt-'.$a+$b.'-Punkt';

    # ist dasselbe wie

    $var='Punkt-';
    $var.=$a;
    $var+=$b
    $var
    .='-Punkt';

    echo
    $var;
    Wird durch das += der String $var von Anfang an überschrieben?
    Zuletzt geändert von mi-schi; 09.10.2007, 21:59. Grund: Antwort auf eigenen Beitrag innerhalb von 24 Stunden!

    Einen Kommentar schreiben:


  • Brian
    antwortet
    AW: Operatoren: drei mal ist gleich

    Zitat von Ingo Beitrag anzeigen
    Hi,

    das hatte ich nicht gemeint. Wenn Du eine Zahl übergeben willst, dann natürlich ohne Anführungszeichen. - sonst ist es keine Zahl mehr bzw. Du setzt wieder auf die unsaubere PHP-Typkonvertierung.
    Auch wenn das eigentlich unnötig ist, gebe ich z.B. intval($_GET['zahl']) an, wenn ich eine Zahl und keinen String übergeben will.
    Denn die Ergebnisse der automatischen Typkonvertierung von PHP können durchaus haarsträubend sein:

    PHP-Code:
    $a=1$b=2;
    echo 
    'Komma-',$a+$b,'-Komma';
    echo 
    '<br>';
    echo 
    'Punkt-'.$a+$b.'-Punkt';
    echo 
    '<br>';
    echo 
    '.'.$a+$b.'.';
    echo 
    '<br>';
    echo 
    '#'.$a+$b.'#'
    ergibt:
    Code:
    Komma-3-Komma
    2-Punkt
    2.1.
    2#
    völig unerwartend und auch fehlerhaft, was bei:
    PHP-Code:
    $a=1$b=2;
    echo 
    'Komma-',intval($a+$b),'-Komma';
    echo 
    '<br>';
    echo 
    'Punkt-'.intval($a+$b).'-Punkt';
    echo 
    '<br>';
    echo 
    '.'.intval($a+$b).'.';
    echo 
    '<br>';
    echo 
    '#'.intval($a+$b).'#'
    nicht passiert.

    Gruß
    Ingo
    ich dachte immer folgendes ergibt bei php nen fehler:

    PHP-Code:
    echo 'Punkt-'.$a+$b.'-Punkt'
    gut hab mich getäucht. wundern tut mich das ergebnis trotzdem, aber ich denke das hat mit altlasten von PHP2 zu tun, wobei ich doch mal durchs manual dafür gehen werden....

    naja, weil ich gedacht hab, das erzeugt nen fehler, hab ichs einfach eingeklammert: (beim ersten ists nicht notwendig, weil das ganze als einzelnes argument an echo übergeben wird)

    PHP-Code:
    $a=1$b=2;
    echo 
    'Komma-',$a+$b,'-Komma'
    echo 
    '<br>'
    echo 
    'Punkt-'.($a+$b).'-Punkt'
    echo 
    '<br>'
    echo 
    '.'.($a+$b).'.'
    echo 
    '<br>'
    echo 
    '#'.($a+$b).'#'
    edit: also folgender string wird von php so interpretiert, weil . und + dieselbe reihenfolge haben:

    PHP-Code:

    $a
    =1$b=2;

    echo 
    'Punkt-'.$a+$b.'-Punkt'

    # ist dasselbe wie

    $var='Punkt-';
    $var.=$a;
    $var+=$b;
    $var.='-Punkt'

    echo 
    $var
    Zuletzt geändert von Brian; 09.10.2007, 21:54.

    Einen Kommentar schreiben:


  • Ingo
    antwortet
    AW: Operatoren: drei mal ist gleich

    Hi,
    Zitat von mi-schi Beitrag anzeigen
    Bei Strings sollte man aber die Anführungszeichen weglassen, oder? Also nicht so:
    get_url_get("$wert");
    das wäre nun wirklich unsinnig, weil Variablen nicht noch in Anführungszeichen gesetzt werden müssen.

    Gruß
    Ingo

    Einen Kommentar schreiben:


  • Ingo
    antwortet
    AW: Operatoren: drei mal ist gleich

    Hi,
    Zitat von mi-schi Beitrag anzeigen
    Achso, ich dachte man kann die Anführungszeichen bei Zahlen weglassen.
    das hatte ich nicht gemeint. Wenn Du eine Zahl übergeben willst, dann natürlich ohne Anführungszeichen. - sonst ist es keine Zahl mehr bzw. Du setzt wieder auf die unsaubere PHP-Typkonvertierung.
    Auch wenn das eigentlich unnötig ist, gebe ich z.B. intval($_GET['zahl']) an, wenn ich eine Zahl und keinen String übergeben will.
    Denn die Ergebnisse der automatischen Typkonvertierung von PHP können durchaus haarsträubend sein:

    PHP-Code:
    $a=1$b=2;
    echo 
    'Komma-',$a+$b,'-Komma';
    echo 
    '<br>';
    echo 
    'Punkt-'.$a+$b.'-Punkt';
    echo 
    '<br>';
    echo 
    '.'.$a+$b.'.';
    echo 
    '<br>';
    echo 
    '#'.$a+$b.'#'
    ergibt:
    Code:
    Komma-3-Komma
    2-Punkt
    2.1.
    2#
    völig unerwartend und auch fehlerhaft, was bei:
    PHP-Code:
    $a=1$b=2;
    echo 
    'Komma-',intval($a+$b),'-Komma';
    echo 
    '<br>';
    echo 
    'Punkt-'.intval($a+$b).'-Punkt';
    echo 
    '<br>';
    echo 
    '.'.intval($a+$b).'.';
    echo 
    '<br>';
    echo 
    '#'.intval($a+$b).'#'
    nicht passiert.

    Gruß
    Ingo

    Einen Kommentar schreiben:


  • Brian
    antwortet
    AW: Operatoren: drei mal ist gleich

    Zitat von mi-schi Beitrag anzeigen
    Mit zwei ist gleichs und get_url_get('0') funktioniert es. Wäre ja auch ein Ding, wenn PHP einfach mal "last" in ein Integer (wie wird das eigentlich ausgesprochen?) umwandelt.
    tuts aber....

    Zitat von mi-schi Beitrag anzeigen
    Da müsste PHP das als String erkennen:
    $wert = 0;
    get_url_get($wert);
    eben nicht. Integer sind Ganzzahlen, und zwar nur Ganzzahlen! strings hingegen können alles repräsentieren, eben auch Zahlen. der unterschied ist, das du mit strings, normalerweise, nicht rechnen kannst. in php kannst du das zwar, aber nur bedingt:

    PHP-Code:
    $string='a22a';
    $integer=2;
    echo 
    $string+$integer
    ergibt 4, weil PHP nun in dem string nur nach der ERSTEN zahl sucht.

    anders in JavaScript, dort ist der additionsoperator auch gleichzeitig der zuweisungsoperator '+':

    Code:
    var ergebnis=1+1; //ergibt 2
    var string='1'+'1'; // ergibt 11
    in php gibt es dabei keinen unterschied

    Bei Strings sollte man aber die Anführungszeichen weglassen, oder? Also nicht so:
    get_url_get("$wert");
    das ist variablen auflösung wird bei funktionen von php aber automatisch gemacht....

    Einen Kommentar schreiben:


  • mi-schi
    antwortet
    AW: Operatoren: drei mal ist gleich

    Das ist ja verwirrend. Nochmal nachdenken..............

    DAS WAR DAS PROBLEM, Ingo!!!

    Mit zwei ist gleichs und get_url_get('0') funktioniert es. Wäre ja auch ein Ding, wenn PHP einfach mal "last" in ein Integer (wie wird das eigentlich ausgesprochen?) umwandelt.
    Da müsste PHP das als String erkennen:
    $wert = 0;
    get_url_get($wert);

    Bei Strings sollte man aber die Anführungszeichen weglassen, oder? Also nicht so:
    get_url_get("$wert");
    Zuletzt geändert von mi-schi; 09.10.2007, 21:14. Grund: dumme Frage weggemacht..., Rechtschreibfehler

    Einen Kommentar schreiben:


  • Brian
    antwortet
    AW: Operatoren: drei mal ist gleich

    Zitat von mi-schi Beitrag anzeigen
    Achso, ich dachte man kann die Anführungszeichen bei Zahlen weglassen. Danke für den Tipp:gott:
    wenn du bei Zahlen die anführungszeichen weglässt, ist die Zahl vom Typ Integer. Mit anfürhungszeichen ist die Zahl vom Typ String!

    das beispiel von ingo sollte das verdeutlicht haben:

    PHP-Code:
    if(=== '0') echo 1;
       else echo 
    2
    gibt 2 aus.


    p.s.: ich muss mich aber auch korrigieren. bei == in verbindung mit Integern führt PHP IMMER einen Integer vergleich durch...

    Einen Kommentar schreiben:


  • mi-schi
    antwortet
    AW: Operatoren: drei mal ist gleich

    Zitat von Brian Beitrag anzeigen
    weil == loose comparsion (lockerer vergleich) ist und weil der linke operand zum vergleich benutzt wird, weswegen hier der rechte operand in einen integer umgewandelt wird. da die integer representation von "last" eben 0 ist, ist das ergebnis TRUE.

    === ist strict comparsion (strenger vergleich), das heißt das das ergebnis nur TRUE ist, wenn beide operanten vom gleichen typ sind und beide dengleichen wert haben.

    gruß
    Ach Mensch Brian, wenn ich dich nicht hätte.
    Also mit drei ist gleichs funktioniert es.
    Gleicher Typ bedeutet dann, dass nichts umgewandelt wird:
    ja / nein / vielleicht / weis ich ni




    Edit (autom. Beitragszusammenführung):

    Zitat von Ingo Beitrag anzeigen
    Hi,
    nur ergänzend:
    PHP ist eine ziemlich "laxe" oder besser gesagt ungenaue Programmiersprache, die es Anfängern halt leichter machen soll.
    Eine exaktere Programmiersprache würde bei:
    PHP-Code:
    function get_url_get($handle) {
        if (
    $handle === "last") {
        }
    }
    echo 
    get_url_get(0); 
    einen Fehler werfen, weil die Funktion einen String erwartet, aber Du ihr eine Zahl übergibst.

    Auch wenn PHP hier netter Weise eine Typkonvertierung für Dich vornimmt, solltest Du mMn trotzdem sauberer programmieren und keine Typen miteinander vermischen, d.h. '0' übergeben und nicht 0.

    Das ändert freilich nichts daran, dass Du in PHP === angeben musst, um einen genauen Typenvergleich zu erhalten und if(0 === '0') tatsächlich false ergibt.

    Gruß
    Ingo
    Achso, ich dachte man kann die Anführungszeichen bei Zahlen weglassen. Danke für den Tipp:gott:
    Zuletzt geändert von mi-schi; 09.10.2007, 20:51. Grund: Antwort auf eigenen Beitrag innerhalb von 24 Stunden!

    Einen Kommentar schreiben:

homepage-forum.de - Hilfe für Webmaster! Statistiken

Einklappen

Themen: 57.202   Beiträge: 432.324   Mitglieder: 29.596   Aktive Mitglieder: 49
Willkommen an unser neuestes Mitglied, BillyTig.

Online-Benutzer

Einklappen

866 Benutzer sind jetzt online. Registrierte Benutzer: 3, Gäste: 863.

Mit 4.707 Benutzern waren am 12.01.2023 um 03:07 die meisten Benutzer gleichzeitig online.

Die neuesten Themen

Einklappen

  • bodan
    Bard - Googles Antwort auf ChatGPT geht ins Rennen
    Try Bard and share your feedback Mar 21, 2023 - so der Aufruf vor wenigen Stunden.

    und weiter: We’re starting to open access to Bard, an early experiment that lets you collaborate with generative AI. We're beginning with the U.S. and the U.K., and will expand to more countries and languages...
    Gestern, 23:20
  • daggel
    Eine horizontale Linie mit <hr> in css als bild mit wiederholung anzeigen?
    Hallo,

    ich bin neu hier und Webseiten-Anfänger. Trotzdem möchte ich in einem HR-Tag mit Css ein Bild anzeigen, dass nur horizontal über die gesamte Seite wiederholt wird.
    HTML-Code:
      <!--<div id="bild2">      
    <img src="..\Bilder\TrennungTranparentQuer.jpeg">
    ...
    Gestern, 15:44
  • bodan
    CloudFest Hackathon 2023 noch bis 23 März- mit innovativen Projekten
    Hi liebe Homepage-Foren-Feunde,


    hier ein kurzer Hinweis auf das CloudFest 2023

    wie immer gibts eine Fülle von Angeboten am Fest. Da ist ganz ganz viel dabei!
    ...unter anderem auch mit innovativen WordPress-Projekten: VS Code-Erweiterung für In-Browser-Entwicklung...
    21.03.2023, 12:41
  • PatX
    Design Hilfe zu einer Form die ein PHP Script triggert
    Ich würde mich über eure Meinung zu dem folgenden Szenario freuen:

    Ich möchte ein Formular einrichten, das im Wesentlichen die folgenden Schritte triggert:
    - Ein PHP-Skript ausführen
    - Formulardaten in die WordPress-Datenbank meiner Website speichern
    - KEINE anderen...
    21.03.2023, 07:20
  • Reservespieler
    Website pflegen
    Ein freundliches Hallo an alle,
    Ich würde gerne von meinem Verein die Pflege der Website übernehmen da es auch einige Vorteile als aktives Mitglied hat. Das Problem ist nur das ich überhaupt keine Ahnung davon habe.
    Daher hier meine Frage:
    Wie funktioniert sowas und was muss ich...
    18.03.2023, 16:48

Die neuesten Beiträge

Einklappen

Lädt...
X