Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP richtig "lernen"

Einklappen

Neue Werbung 2019

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

  • PHP richtig "lernen"

    Hallo alle zusammen,

    ich habe hauptberuflich nichts mit PHP, Code oder irgendwelchen Computern zu tun. Da es aber coronabedingt beruflich eher ruhig war, versuche ich mich gerade selbststaendig zu machen (bzw. habe ich schon) mit einem Projekt, welches komplett mit SQL und PHP laeuft. Das Projekt ist nicht extrem kompliziert, aber um die anfaenglichen Investitionskosten zu senken habe ich mich um den kompletten Teil PHP, SQL und HTML selber gekuemmert. Da ich es nie von Grund auf gelernt habe wuerde ich meine Kenntnisse als "gemischt" bezeichnen. Da ich immer noch viel Zeit habe wuerde ich mein "Wissen" gerne auf eine ordentliches "Fundament" stellen und mehr lernen.
    Da ich aber die Basics nie gelernt habe, habe ich aber aktuell das Problem, dass die "Anfaengerkurse", die ich bisher gefunden habe bei weitem nicht tief genug gehen (wie man einfache SELECT Abfragen macht weiss ich, mich wuerde aber auch die Fundamente von SQL bzw Datanbanken generell interessieren, effizienz der Abfragen usw.) oder viel zu einfach sind ("hello world" kriege ich schon hin, wie gesagt das Projekt ist schon ordentlich, natuerlich nicht perfekt von mir umgesetzt, aber es laeuft bisher ohne Probleme).
    Jetzt zu meiner eigentlichen Frage: Habt ihr hier irgendwelche Vorschlaege fuer gute Buecher, Kurse, Webseiten, die zwar fuer Anfaenger gedacht sind, aber eben ordentlich Wissen vermitteln auf dem man spaeter dann aufbauen kann

    edit: achso, gerne auch objektorientiert. Da ich da wirklich keine Ahnung von habe, habe ich bisher alles prozedural geloest, aber ich denke OOP waere generell etwas eleganter...

    Viele Gruesse und danke schonmal
    dsdxb

    TL;DR: wie vertiefe ich am besten meine vorhandenen groben PHP und SQL Kentnisse

  • #2
    hallo,
    gehört ja eher etwas offtopic.

    du suchst sowas:
    https://online-learning.harvard.edu/...-beginners-php

    oder nutze ein framework wie slim:
    https://www.slimframework.com/

    symphoy und lavarel finde ich für den anfang einfach nicht geeinget, da ein blick unter die haube erschwert wird.

    Kommentar


    • #3
      Hi Tom,

      Danke für deine Antworten. Das erste ist leider etwas teuer. Beim zweiten Vorschlag verstehe ich aktuell nicht was ein Framework bringt, wenn es um Grundlagen und sowas geht (sorry für die evtl blöde Frage).
      ​​​​

      Kommentar


      • #4
        Zitat von Dsdxb Beitrag anzeigen
        Hi Tom,

        Danke für deine Antworten. Das erste ist leider etwas teuer. Beim zweiten Vorschlag verstehe ich aktuell nicht was ein Framework bringt, wenn es um Grundlagen und sowas geht (sorry für die evtl blöde Frage).
        ​​​​
        sorry, hatte ich nicht nach geschaut, kostenlosen web programming kurs gibt es nur mit python und js :

        https://online-learning.harvard.edu/...and-javascript

        was dir ein framework bringt ?

        standartprobleme sehen, lösungen erkennen und verstehen, an gut documentierten Code lernen ?


        ich habe das so versucht

        Kommentar


        • #5
          Zitat von Dsdxb Beitrag anzeigen
          Das erste ist leider etwas teuer. ​​​​
          Der Kurs liest sich auch eher wie urschleim. Das was du also nicht wolltest. Ich bin mir hier aber auch nicht ganz sicher auf was für ein Level du bist. Es klingt so, als könntest du Problem lösen, merkst aber, dass deine Lösungen nicht das Gelbe vom Ei sind. Das geht dann schon eher in Richtung "Struktur". Wie wird der Code und die Anwendung sinnvoll strukturiert.
          Frameworks liefern dafür schon eine gut Vorlage/Grundlage. Ein Framework bietet Lösungen für die ganzen "Standardprobleme" die du im Webumfeld hast. Z.B. Symfony oder Laravel, Das von tomBuilder vorgeschlagene Slim würde ich nicht mit dazu zählen, das ist ein Router + eine PSR 7 Implementation, da gibts noch ein paar mehr Sachen die sinnvoll sind.
          Ein Weg weiter zu kommen wäre also in ein Framework eunzusteigen und eventuell auch dein Projekt zu mirgieren.

          Kruse ansich kann ich so nicht direkt empfehlen. Wenn man einmal im Thema drin ist, interessieren "Anfängerkurse" nicht mehr so.
          Ok, ein Kurs kann ich aber "Empfehlen"...
          https://laracasts.com/series/lets-bu...m-with-laravel
          https://github.com/laracasts/Lets-Bu...rum-in-Laravel
          Da kommt an Ende ein Forum auf Basis von Laravel raus und das voll getestet. Denn hab ich mir zumindestens mal 4 Stunden auf zwei Zugfahrten gegeben. Und eigentlich wollt ich nur kurz drüber schauen ob der Kurs "vernünftig" ist. Das ist aufjedenfall ein netter Einstieg in Laravel, besonders TDD und das mit einem etwas komplexeren Projekt. Der Krus ist aber mittlerweile aber etwas out of date und 20 Stunden sind auch nicht ganz ohne.

          Kommentar


          • #6
            Lavarel hätte ich als anfänger nicht verstanden, genauso die aktuelle version von symfony.
            deswegen slim, denn ein router, DI, psr-7 halte ich erst mal für genug.
            wie dem auch sei, jeder lernt unterschiedlich.

            Kommentar


            • #7
              Ich schmeiße mal meine Playlist hier in den Raum

              https://www.youtube.com/watch?v=feU2...Pql1CMHuVRYkTh

              hier habe ich einen Online Shop programmiert(bin immer noch dabei, aktuell Episode 61) dabei habe ich alles mit Funktionen umgesetzt, allerdings habe ich strikt auf die OOP Grundlagen geachtet wie etwa SOLID usw (soweit es ging)

              in diesen Videos siehst du und hörst verschiedene Begriffe wie Routing, Actions, EVA und Logger. außerdem zeige ich wie man mit einer REST API arbeitet (bezahlung via Paypal ist nativ mit PHP Programmiert)

              den code kannst du dir hier ja eventuell anschauen https://github.com/BlackScorp/shop

              Aber lies bitte den Disclaimer, der Code ist dazu da um die Grundlagen zu lernen, NICHT einen wirklichen online shop betreiben.

              Natürlich gibt es auf dem Kanal noch weitere Playlists wie OOP und andere Tutorials, PDF erstellen, HTML Parsen , template Engine, mit Datenbank arbeiten usw.

              Zwischendurch gibt es auch ab und zu Gewinnspiele in Form von PHP Magazin Zeitschrift, weil ich da der Autor bin und ab und zu gibt es Livestreams, im Oktober gab es welche.
              apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

              Kommentar


              • #8
                Hallo alle zusammen,

                vielen Dank fuer eure Antworten. Die werde ich mir gleich mal in Ruhe anschauen.
                Ich denke, das was du gesagt hast erc trifft den Nagel ziemlich auf den Kopf "Es klingt so, als könntest du Problem lösen, merkst aber, dass deine Lösungen nicht das Gelbe vom Ei sind. Das geht dann schon eher in Richtung "Struktur"." Die eigentliche Problemloesung ist (wuerde ich mal sagen) nicht mein Problem. Mein Problem ist dann eher es "schoen" und "effizient" zu loesen. In meinem aktuellen Projekt laeuft alles einwandfrei, aber das EVA-Prinzip habe ich zum Beispiel 0 beachtet, einfach weil ich nicht wusste wie ich das dann realisieren soll. Der Code laeuft trotzdem und da ich der einzige bin, der ihn wartet ist das aktuell kein eigentliches Problem (sobald es groesser wird, muss ich das Projekt sowieso an jemand professionellen abgeben), aber ich haette es gerne schoen geloest (nicht fuer dieses Projekt, dazu ist zu wenig Zeit, aber einfach fuer mich fuer die Zukunft).
                Ein kleines Beispiel:
                PHP-Code:
                $sql "SELECT id, status FROM `xxxx` WHERE `xxxx_id` = ? ORDER BY status DESC";
                if ( 
                $stmt mysqli_prepare($conn$sql) ) {
                mysqli_stmt_bind_param($stmt"i"$_SESSION["xxxx_id"]);
                mysqli_stmt_execute($stmt);
                mysqli_stmt_bind_result($stmt$id$status);
                mysqli_stmt_store_result($stmt);

                Das funktioniert natuerlich. Ich weiss aber, dass es definitiv unschoen geloest ist. Und um das zu lernen fehlen mir einfach gewisse basics Und das ist nur ein kleines Beispiel. EVA-Prinzip faende ich auch einfach angenehmer

                Kommentar


                • #9
                  zu dem stückchen Code kann ich jetzt wenig sagen...

                  grössre framework nutzen meist schon ORM wie

                  symfony doctrine:
                  https://symfony.com/doc/3.1/doctrine.html
                  und lavarel eloquent:
                  https://laravel.com/docs/8.x/eloquent

                  aber auch ein DBA (database abstrction layer)
                  https://www.doctrine-project.org/pro...ipulation.html
                  ist nicht mehr so ei nfach zu durchschauen.


                  generell lässt sich wohl sagen,

                  die verbundung und kommunikation mit der datenbank ist ein service, welcher durch einen provider bereitgestellt wird.

                  schöner bei:
                  https://www.slimframework.com/docs/v3/concepts/di.html

                  als bei:

                  https://symfony.com/doc/current/serv...using-services

                  und

                  https://laravel.com/docs/8.x/container
                  https://laravel.com/docs/8.x/providers

                  Kommentar


                  • #10
                    Zitat von Dsdxb Beitrag anzeigen
                    Hallo alle zusammen,

                    vielen Dank fuer eure Antworten. Die werde ich mir gleich mal in Ruhe anschauen.
                    Ich denke, das was du gesagt hast erc trifft den Nagel ziemlich auf den Kopf "Es klingt so, als könntest du Problem lösen, merkst aber, dass deine Lösungen nicht das Gelbe vom Ei sind. Das geht dann schon eher in Richtung "Struktur"." Die eigentliche Problemloesung ist (wuerde ich mal sagen) nicht mein Problem. Mein Problem ist dann eher es "schoen" und "effizient" zu loesen. In meinem aktuellen Projekt laeuft alles einwandfrei, aber das EVA-Prinzip habe ich zum Beispiel 0 beachtet, einfach weil ich nicht wusste wie ich das dann realisieren soll. Der Code laeuft trotzdem und da ich der einzige bin, der ihn wartet ist das aktuell kein eigentliches Problem (sobald es groesser wird, muss ich das Projekt sowieso an jemand professionellen abgeben), aber ich haette es gerne schoen geloest (nicht fuer dieses Projekt, dazu ist zu wenig Zeit, aber einfach fuer mich fuer die Zukunft).
                    Ein kleines Beispiel:
                    PHP-Code:
                    $sql "SELECT id, status FROM `xxxx` WHERE `xxxx_id` = ? ORDER BY status DESC";
                    if ( 
                    $stmt mysqli_prepare($conn$sql) ) {
                    mysqli_stmt_bind_param($stmt"i"$_SESSION["xxxx_id"]);
                    mysqli_stmt_execute($stmt);
                    mysqli_stmt_bind_result($stmt$id$status);
                    mysqli_stmt_store_result($stmt);

                    Das funktioniert natuerlich. Ich weiss aber, dass es definitiv unschoen geloest ist. Und um das zu lernen fehlen mir einfach gewisse basics Und das ist nur ein kleines Beispiel. EVA-Prinzip faende ich auch einfach angenehmer
                    Also zu diesem Code kann ich nur sagen, du nutzt wenigstens Prepare statmenet und kein SELECT * das ist doch schon mal die halbe Miete.

                    Du prüfst aber hier nicht den else Fall, was passiert wenn dein SQL Query nicht prepared werden konnte weil gerade irgendwas mit der DB nicht in Ordnung ist? dieser Code würde einfach weiter ausgeführt werden und würde zu weiteren SQL Fehlern führen.

                    alles was mit SQL zu tun hat, habe ich zum Beispiel in eine eigene Funktion ausgelagert, damn man einen sogenannten "Early Return" ausführen kann. Hier siehst du ein Beispiel

                    https://github.com/BlackScorp/shop/b...er.php#L69-L77

                    wenn prepare nicht ging, breche ab, wenn keine Ergebnisse gefunden wurden breche ab usw. Da gibts nicht mal ein else. Sondern wenn irgendwas nicht zutrifft, abbruch der Rest wird nicht ausgeführt.

                    Ich nutze alerdings hier PDO und nicht mysqli
                    apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                    Kommentar


                    • #11
                      HI Blackscorp,

                      danke fuer deine Antwort. Ich hab mir grad die ersten 3 Videos von deiner Playliste angeschaut und fand sie sehr gut gemacht. Kompliment. Die einzelnen Codezeilen fand ich nicht so spannend, allerdings fand ich die Struktur super interessant und die Herangehensweise. Das ist genau das wo es bei mir hapert.

                      Ich denke ich werde versuchen meine dappigen DB-Abfragen sauberer und ordentlicher aufzubauen und dabei sollte ich ja was lernen

                      Kommentar


                      • #12
                        Zitat von Dsdxb Beitrag anzeigen
                        HI Blackscorp,

                        danke fuer deine Antwort. Ich hab mir grad die ersten 3 Videos von deiner Playliste angeschaut und fand sie sehr gut gemacht. Kompliment. Die einzelnen Codezeilen fand ich nicht so spannend, allerdings fand ich die Struktur super interessant und die Herangehensweise. Das ist genau das wo es bei mir hapert.

                        Ich denke ich werde versuchen meine dappigen DB-Abfragen sauberer und ordentlicher aufzubauen und dabei sollte ich ja was lernen
                        Es hilft schon wenn du einfach alles in Funktionen auslagerst, so dass man im Code gar nichts von der DB mitkriegt.

                        Schau dir zb mein Registrierungsscript an

                        https://github.com/BlackScorp/shop/b...s/register.php

                        siehst du irgendwas von Datenbank? Oder HTML? Die Validierung könnte ich auch auslagern

                        oder der Login Script

                        https://github.com/BlackScorp/shop/b...ions/login.php

                        apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                        Kommentar


                        • #13
                          Zitat von BlackScorp Beitrag anzeigen
                          Du prüfst aber hier nicht den else Fall, was passiert wenn dein SQL Query nicht prepared werden konnte weil gerade irgendwas mit der DB nicht in Ordnung ist? dieser Code würde einfach weiter ausgeführt werden und würde zu weiteren SQL Fehlern führen.
                          Du bemängelst das der Code weiter ausgeführt wird wenn eine Fehler auftritt...

                          Zitat von BlackScorp Beitrag anzeigen
                          alles was mit SQL zu tun hat, habe ich zum Beispiel in eine eigene Funktion ausgelagert, damn man einen sogenannten "Early Return" ausführen kann. Hier siehst du ein Beispiel

                          https://github.com/BlackScorp/shop/b...er.php#L69-L77

                          wenn prepare nicht ging, breche ab, wenn keine Ergebnisse gefunden wurden breche ab usw. Da gibts nicht mal ein else. Sondern wenn irgendwas nicht zutrifft, abbruch der Rest wird nicht ausgeführt.
                          ...und zeigst dann Code, der Fehler knallhart schluckt?! Als Aufrufer ist nicht ersichtlich ob ein Fehler aufgetretten ist oder nicht. Das ist die Garantie für Bugs. Spätestens wenn dort zwei, drei Aufrufe verschachtelt sind, legst du dir die Karten beim Fehler suchen.

                          Z.B. um bei der Funktion zu bleiben. Die Funktion macht zwei verscheidenen Dinge, ein Teil geht aus dem Namen nicht hervor und vertuscht potentiell Fehler im aufrufenden Code (wenn eine $userId unfreiwillig null ist). Also wird die auseinander gezogen:

                          PHP-Code:
                          function getUserDataForId(int $userId): array
                          {
                              
                          //userId ermittellung raus
                              
                          ...
                          }

                          function 
                          getCurrentUserData(); array
                          {
                              
                          $userId getCurrentUserId();

                              if (!
                          $userId) {
                                  return [];
                              }

                              return 
                          getUserDataForId($userId);

                          Was heißt es jetzt, wenn getCurrentUserData() ein leeren Array liefert?! Ist der User nicht eingeloggten, gab ein ein Fehler beim ermitteln des eingeloggten Nutzers, ist die Datenbank offline, ist der Query fehlerhaft, gibt es den User nicht. Viel spaß beim Suchen...

                          Grade nach ein paar Jahren PHP sollte einem die Wichtigkeit von "fail fast" klar sein. Es bringt nix bei Fehlern den Code unkontrolliert weiter laufen zu lassen. Seit PHP 8 sind bei PDO und Mysqli als Fehlerbehandlung die Exception voreingestellt.

                          Kommentar


                          • #14
                            Zitat von erc Beitrag anzeigen

                            Grade nach ein paar Jahren PHP sollte einem die Wichtigkeit von "fail fast" klar sein. Es bringt nix bei Fehlern den Code unkontrolliert weiter laufen zu lassen. Seit PHP 8 sind bei PDO und Mysqli als Fehlerbehandlung die Exception voreingestellt.
                            Was ist denn heute in dich geraten? unterstelle mir doch bitte nicht dass ich es nicht weiß, nur weil nicht im code ist. Ich habe das als Beispiel gezeigt für Early Return. Nur weil es nicht im Code drin ist, heißt es ja nicht dass ich es nicht weiß. Ich habe erst Später in den Videos mit dem Logger angefangen und habe noch nicht alle Funktionen damit aufgerüstet.

                            Ich wollte nicht erst mal 10 Episoden das Framework drumherum aufbauen, sondern die Intention war es nach und nach aufzubauen, damit ich später dann zeigen konnte wozu eigentlich ein Framework da ist. Normalerweise logge ich das einfach weg und es gibt bei mir keine Fehler in diesem Kontext. Der Code ist schon richtig so wie er ist, nur nicht vollständig.

                            Zu Exceptions, das mit PDO stimmt, mysqli nicht, das wollen die erst in 8.1 einbringen https://wiki.php.net/rfc/mysqli_default_errmode (wollte hier einfach mal den Klugscheißer Modus einschalten)
                            apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                            Kommentar


                            • #15
                              So ich wollte mich noch mal für die verschiedenen Lösungen bedanken. Ich hab mir das alles angeschaut und komme bisher am besten klar mit blackscorps Youtube videos. Framework hab ich probiert ist mir aber im moment noch viel zu kompliziert, aber ich bin dran

                              Kommentar

                              Lädt...
                              X