Ankündigung

Einklappen
Keine Ankündigung bisher.

Operatoren: drei mal ist gleich

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

  • Operatoren: drei mal ist gleich

    Hallo,

    warum funktioniert meine Funktion nur, wenn ich bei if ($handle === "last") drei ist gleichs habe?
    PHP-Code:
    function get_url_get($handle) {
    $teile explode("/"$_GET['s']);
        if (
    $handle === "last") {
            
    $teile_count count($teile);
            
    $ausgabe $teile[$teile_count 1];
        } else {
            
    $ausgabe $teile[$handle];
        }
    return 
    $ausgabe;

    Die URL sieht so aus: index.php?s=muh/mah
    Die Abfrage:
    PHP-Code:
    echo get_url_get(0); 
    oder eben
    PHP-Code:
    echo get_url_get("last"); 
    Bei nur zwei ist gleichs in der Funktion wird immer "if" bearbeitet, obwohl bei get_url_get(0) $handle ja 0 ist und nicht "last"?


  • #2
    AW: Operatoren: drei mal ist gleich

    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ß
    Zuletzt geändert von Brian; 09.10.2007, 20:29. Grund: son quatsch. sorry, war bei php3 nach php5 aktualisierung....
    AC/DC Fanpage www.ifyouwantblood.de
    Nein zur Zensur im Internet und anderswo - Anonymous

    Kommentar


    • #3
      AW: Operatoren: drei mal ist gleich

      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
      Ingo Webdesign

      Kommentar


      • #4
        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!

        Kommentar


        • #5
          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...
          AC/DC Fanpage www.ifyouwantblood.de
          Nein zur Zensur im Internet und anderswo - Anonymous

          Kommentar


          • #6
            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

            Kommentar


            • #7
              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....
              AC/DC Fanpage www.ifyouwantblood.de
              Nein zur Zensur im Internet und anderswo - Anonymous

              Kommentar


              • #8
                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
                Ingo Webdesign

                Kommentar


                • #9
                  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
                  Ingo Webdesign

                  Kommentar


                  • #10
                    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.
                    AC/DC Fanpage www.ifyouwantblood.de
                    Nein zur Zensur im Internet und anderswo - Anonymous

                    Kommentar


                    • #11
                      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!

                      Kommentar


                      • #12
                        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.
                        AC/DC Fanpage www.ifyouwantblood.de
                        Nein zur Zensur im Internet und anderswo - Anonymous

                        Kommentar


                        • #13
                          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!

                          Kommentar


                          • #14
                            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....
                            AC/DC Fanpage www.ifyouwantblood.de
                            Nein zur Zensur im Internet und anderswo - Anonymous

                            Kommentar


                            • #15
                              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.
                              Ingo Webdesign

                              Kommentar

                              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

                              905 Benutzer sind jetzt online. Registrierte Benutzer: 3, Gäste: 902.

                              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