Nick: Implementierungen der PHP-Standard-Funktionen

Hallo!

Wo kann man sich die Implementierungen der PHP-Standard-Funktionen ansehen?

Beste Grüße
Nick

  1. Tach!

    Wo kann man sich die Implementierungen der PHP-Standard-Funktionen ansehen?

    Das kommt drauf an. Manche sind in den Quellen unter ext/standard zu finden, manche unter main. Und dann werden oftmals noch andere Funktionen aufgerufen, die sich in anderen Teilen verstecken.

    dedlfix.

    1. Hallo dedlfix!

      Das kommt drauf an. Manche sind in den Quellen unter ext/standard zu finden, manche unter main. Und dann werden oftmals noch andere Funktionen aufgerufen, die sich in anderen Teilen verstecken.

      Was bedeutet "ext/standard" und "main"?

      Nehmen wir mal die Funktion echo als Beispiel. Im PHP-Handbuch kann ich die Implementierung nicht finden.

      Beste Grüße
      Nick

      1. Tach!

        Was bedeutet "ext/standard" und "main"?

        Das sind die Verzeichnisse in den PHP-Quellen. Wenn du was anderes meinst, konkretisiere bitte deine Frage. Ich ging davon aus, dass du bei der Suche nach Implementationen bereits die PHP-Quellen vorliegen hast.

        Nehmen wir mal die Funktion echo als Beispiel. Im PHP-Handbuch kann ich die Implementierung nicht finden.

        Das Handbuch ist in erster Linie für Anwender da. Wenn du dich in die Interna einarbeiten willst, solltest du dich mit PHP at the Core: A Hacker's Guide to the Zend Engine beschäftigen - und natürlich mit den Quellen. Außerdem ist echo keine Funktion sondern ein Sprachkonstrukt. Davon gibt es noch einige mehr und sie werden anders als echte Funktionen behandelt. Nach solchen Sprachkonstrukten habe ich noch nicht die Quellen durchsucht, aber Funktionen findet man ziemlich leicht.

        dedlfix.

        1. Hallo dedlfix!

          Das sind die Verzeichnisse in den PHP-Quellen. Wenn du was anderes meinst, konkretisiere bitte deine Frage. Ich ging davon aus, dass du bei der Suche nach Implementationen bereits die PHP-Quellen vorliegen hast.

          Vielen Dank! Ich dachte, die Funktionen seien auch irgendwo als lesbarer Quelltext hinterlegt.

          Das Handbuch ist in erster Linie für Anwender da. Wenn du dich in die Interna einarbeiten willst, solltest du dich mit PHP at the Core: A Hacker's Guide to the Zend Engine beschäftigen - und natürlich mit den Quellen. Außerdem ist echo keine Funktion sondern ein Sprachkonstrukt. Davon gibt es noch einige mehr und sie werden anders als echte Funktionen behandelt. Nach solchen Sprachkonstrukten habe ich noch nicht die Quellen durchsucht, aber Funktionen findet man ziemlich leicht.

          Vielen Dank! Stimmt natürlich, echo ist im Handbuch halt unter den Funktionen zu finden.

          Beste Grüße
          Nick

          1. Hallo,

            Das sind die Verzeichnisse in den PHP-Quellen.
            Vielen Dank! Ich dachte, die Funktionen seien auch irgendwo als lesbarer Quelltext hinterlegt.

            sind sie doch. Oder was hast du erwartet, wenn nicht den wirklichen C-Quellcode?

            Vielen Dank! Stimmt natürlich, echo ist im Handbuch halt unter den Funktionen zu finden.

            Stimmt. Das gehört eigentlich korrigiert.

            Ciao,
             Martin

            --
            Disziplin: Teppichböden wiederfinden, wenn man sie verlegt hat.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            1. Hallo Martin!

              sind sie doch. Oder was hast du erwartet, wenn nicht den wirklichen C-Quellcode?

              Ups.

              Stimmt. Das gehört eigentlich korrigiert.

              Wo würdest du es denn einsortieren?

              Beste Grüße
              Nick

              1. Hallo,

                Stimmt. Das gehört eigentlich korrigiert.
                Wo würdest du es denn einsortieren?

                eigentlich eher irgendwo unter Language Reference.

                Ciao,
                 Martin

                --
                They say hard work never killed anyone, but I figure, why take the risk?
                  (Ronald Reagan, US-Präsident 1981-1989)
                Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                1. eigentlich eher irgendwo unter Language Reference.

                  Wieso denn das? echo()ist eine Funktion zur Textausgabe. Ich finde, sie ist da, wo sie ist, richtig.

                  1. [latex]Mae  govannen![/latex]

                    eigentlich eher irgendwo unter Language Reference.

                    Wieso denn das? echo()ist eine Funktion zur Textausgabe. Ich finde, sie ist da, wo sie ist, richtig.

                    Nein, echo ist eben _keine_ Funktion; siehe Beschreibung. Deutlich zu sehen an folgendem Beispiel: man schreibt echo 1,2,3; Versuch mal echo(1,2,3);, das wirft einen Fehler

                    Stur lächeln und winken, Männer!
                    Kai

                    --
                    It all began when I went on a tour, hoping to find some furniture
                     Followed a sign saying "Beautiful Chest", led to a lady who showed me her best)
                    SelfHTML-Forum-Stylesheet
                    1. Hallo,

                      Versuch mal echo(1,2,3);, das wirft einen Fehler

                      mitnichten. Das ist äquivalent zu echo (3); und damit echo 3;
                      Das Komma als Operator trennt mehrere Ausdrücke, die der Reihe nach ausgewertet und dann wieder verworfen werden - bis auf den letzten, der das Ergebnis des Gesamtausdrucks ausmacht.

                      Ciao,
                       Martin

                      --
                      Wer morgens zerknittert aufsteht, hat den ganzen Tag Gelegenheit, sich zu entfalten.
                      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                      1. [latex]Mae  govannen![/latex]

                        Versuch mal echo(1,2,3);, das wirft einen Fehler

                        mitnichten.

                        Doch.

                        Das ist äquivalent zu echo (3); und damit echo 3;
                        Das Komma als Operator trennt mehrere Ausdrücke, die der Reihe nach ausgewertet und dann wieder verworfen werden - bis auf den letzten, der das Ergebnis des Gesamtausdrucks ausmacht.

                        Nein. Daß es nicht geht, steht übrigens auch in der Beschreibung von echo.

                        Stur lächeln und winken, Männer!
                        Kai

                        --
                        It all began when I went on a tour, hoping to find some furniture
                         Followed a sign saying "Beautiful Chest", led to a lady who showed me her best)
                        SelfHTML-Forum-Stylesheet
                      2. Tach!

                        Versuch mal echo(1,2,3);, das wirft einen Fehler
                        mitnichten. Das ist äquivalent zu echo (3); und damit echo 3;
                        Das Komma als Operator trennt mehrere Ausdrücke, die der Reihe nach ausgewertet und dann wieder verworfen werden - bis auf den letzten, der das Ergebnis des Gesamtausdrucks ausmacht.

                        Bei C vielleicht. Schon erwähnt wurde, dass obiges Konstrukt einen Syntaxerror wirft. Wenn deine Aussage auf PHP anwendbar wäre, würden auch

                        (1, 2, 3);

                        und

                        1, 2, 3;

                        syntaktisch richtig sein. Sind sie aber nicht.

                        dedlfix.

                        1. Hallo,

                          Das Komma als Operator trennt mehrere Ausdrücke, die der Reihe nach ausgewertet und dann wieder verworfen werden - bis auf den letzten, der das Ergebnis des Gesamtausdrucks ausmacht.
                          Bei C vielleicht. Schon erwähnt wurde, dass obiges Konstrukt einen Syntaxerror wirft.

                          ja, das habe ich inzwischen auch ausprobiert, weil ich es nicht glauben wollte.

                          Wenn deine Aussage auf PHP anwendbar wäre, würden auch
                            (1, 2, 3);
                          und
                            1, 2, 3;
                          syntaktisch richtig sein. Sind sie aber nicht.

                          Ich war bisher davon ausgegangen, dass der Komma-Operator, der ja in PHP prinzipiell auch existiert (in der Operator Precedence ist er zumindest mit aufgeführt), auch tatsächlich nutzbar ist.

                          Dass er allerdings nur ein Etikettenschwindel ist, hatte ich nicht erwartet. Zugegeben, ich habe ihn bisher auch nur in for-Statements benutzt.

                          Ciao,
                           Martin

                          --
                          "Gestern habe ich die Rede des Parteivorsitzenden gehört. Zwei Stunden lang!" - "Worüber?" - "Hat er nicht gesagt."
                          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                    2. Nein, echo ist eben _keine_ Funktion; siehe Beschreibung.

                      echo() is not actually a function ...

                      Ich lese das so, dass es momentan noch keine ist, aber eine werden soll. Zumindest sagt mir das "actually" das.
                      Gleiches gilt für print().

                      Daher glaube ich immer noch, dass echo() bei den Funktionen gut aufgehoben ist ;)

                      Wenn ich das falsch lese, auch ok, auch ich kann mich mal irren ;)

                      1. Hallo,

                        echo() is not actually a function ...
                        Ich lese das so, dass es momentan noch keine ist, aber eine werden soll. Zumindest sagt mir das "actually" das.

                        dann bist du auf einen "false friend" aus der englischen Sprache hereingefallen. Denn "actual" hat nichts mit "aktuell" zu tun; es bedeutet "tatsächlich". Und die Verneinung, also "not actually", übersetzt man am besten mit "eigentlich nicht", eventuell[1] auch mit "nicht wirklich".

                        Wenn ich das falsch lese, auch ok, auch ich kann mich mal irren ;)

                        Selbstverständlich. Wer das abstreitet, macht sich von vornherein unglaubwürdig.

                        Ciao,
                         Martin

                        [1] Das ist auch so ein false friend: Gern wird "eventual(ly)" mit "eventuell" übersetzt - falsch! Denn "eventual" bedeutet "schließlich" oder "am Ende".

                        --
                        Wer barfuß geht, dem kann man nicht die Schuld in die Schuhe schieben.
                        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                        1. Danke, wieder was gelernt. Mein Englisch reicht zwar um mich verständlich zu machen aber ist sicher nicht das Beste ;)

                      2. Tach!

                        Nein, echo ist eben _keine_ Funktion; siehe Beschreibung.
                        echo() is not actually a function ...
                        Ich lese das so, dass es momentan noch keine ist, aber eine werden soll. Zumindest sagt mir das "actually" das.

                        Das glaube ich nicht. Bei Python ist das print bei einem Versionssprung mal zu einer Funktion mutiert. Das setzt nun voraus, dass Klammernzwang besteht. Der Grund war unter anderem, bisherige Spezialsyntax zu eliminieren, deren Funktionalität nun mit normalen Funktionsparametern zu erreichen ist. Man kann nun nach dieser Umstellung auch noch weitere Parameter erfinden, falls Bedarf besteht.

                        Bei PHP kann man das zwar nicht prinzipiell ausschließen, aber es müsste (in Zukunft) bedeutende Gründe geben, warum echo in das Funktionskorsett gepresst werden sollte. Derzeit bietet es keine Vorteile, aber der Klammernzwang und die Komma-Geschichte würde Änderungen bei den Scripten erfordern, woraufhin sie gegebenenfalls inkompatibel zu bisherigen Versionen werden. Und für die Kurzschreibweise <?= müsste man sich auch was neues ausdenken (zumal sie ab PHP 5.4 unabhängig von short_open_tag generell verfügbar wird).

                        Daher glaube ich immer noch, dass echo() bei den Funktionen gut aufgehoben ist ;)

                        Anscheinend glauben die Handbuchautoren, dass es irgendwie sinnvoll wäre, echo (und print und weitere Sprachkonstrukte) wie eine Funktion darzustellen, um dann im Fließtext klarzustellen, dass es keineswegs wie eine Funktion verwendet werden kann (und bei den anderen zumindest der Klammernzwang entfällt). Sehr schön konterkarriert sich das in diesem Satz: "Additionally, if you want to pass more than one parameter to echo(), the parameters must not be enclosed within parentheses." Erst echo() mit Klammern schreiben, um sie dann zu verbieten ...

                        dedlfix.