{"id":29659623,"url":"https://github.com/devmuhammadzaki/learn-php-the-right-way","last_synced_at":"2025-07-22T09:36:26.060Z","repository":{"id":305131837,"uuid":"1021690078","full_name":"devmuhammadzaki/learn-php-the-right-way","owner":"devmuhammadzaki","description":"This is me following the Learn PHP The Right Way series on youtube.","archived":false,"fork":false,"pushed_at":"2025-07-18T12:50:19.000Z","size":15,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-07-18T14:16:04.782Z","etag":null,"topics":["php"],"latest_commit_sha":null,"homepage":"https://youtube.com/playlist?list=PLr3d3QYzkw2xabQRUpcZ_IBk9W50M9pe-","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devmuhammadzaki.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-17T19:37:04.000Z","updated_at":"2025-07-18T12:50:23.000Z","dependencies_parsed_at":"2025-07-18T14:28:12.333Z","dependency_job_id":null,"html_url":"https://github.com/devmuhammadzaki/learn-php-the-right-way","commit_stats":null,"previous_names":["devmuhammadzaki/learn-php-the-right-way"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/devmuhammadzaki/learn-php-the-right-way","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devmuhammadzaki%2Flearn-php-the-right-way","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devmuhammadzaki%2Flearn-php-the-right-way/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devmuhammadzaki%2Flearn-php-the-right-way/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devmuhammadzaki%2Flearn-php-the-right-way/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devmuhammadzaki","download_url":"https://codeload.github.com/devmuhammadzaki/learn-php-the-right-way/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devmuhammadzaki%2Flearn-php-the-right-way/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266466415,"owners_count":23933382,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["php"],"created_at":"2025-07-22T09:36:19.011Z","updated_at":"2025-07-22T09:36:26.045Z","avatar_url":"https://github.com/devmuhammadzaki.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Learn PHP The Right Way\n\nThis is me following the Learn PHP The Right Way series on youtube. The series is split in three sections \u0026 all the videos are within the following [playlist](https://youtube.com/playlist?list=PLr3d3QYzkw2xabQRUpcZ_IBk9W50M9pe-).\n\n# Section 1 - Basic PHP\n\n- [ 1.1 - Syntax](./section1/01-basic-syntax.php)\n- [ 1.2 - Constants \u0026 Variable Variables](./section1/02-variables-and-constants.php)\n- [ 1.3 - Data Types \u0026 Casting](./section1/03-data-types.php)\n- [ 1.4 - Boolean Data Type](./section1/04-boolean-data-type.php)\n- [ 1.5 - Integer Data Type](./section1/05-integer-data-type.php)\n- [ 1.6 - Float Data Type](./section1/06-float-data-type.php)\n- [ 1.7 - String Data Type - Heredoc \u0026 Nowdoc Syntax](./section1/07-string-data-type.php)\n- [ 1.8 - Null Data Type](./section1/08-null-data-type.php)\n- [ 1.9 - Arrays](./section1/09-array-data-type.php)\n- [ 1.10 - Expressions]()\n- [ 1.11 - Operators Part 1]()\n- [ 1.12 - Operators Part 2]()\n- [ 1.13 - Operator Precedence \u0026 Associativity]()\n- [ 1.14 - Control Structures - If/Else]()\n- [ 1.15 - Loops - Break \u0026 Continue]()\n- [ 1.16 - Switch Statement]()\n- [ 1.17 - Match Expression]()\n- [ 1.18 - Return, Declare \u0026 Tickable Statements]()\n- [ 1.19 - Include \u0026 Require]()\n- [ 1.20 - Functions \u0026 Type Hinting]()\n- [ 1.21 - Function Parameters - Named Arguments - Variadic Functions \u0026 Unpacking]()\n- [ 1.22 - Variable Scopes \u0026 Static Variables]()\n- [ 1.23 - Variable, Anonymous, Callable, Closure \u0026 Arrow Functions]()\n- [ 1.24 - Work With Date, Time \u0026 Time Zones]()\n- [ 1.25 - Work With Arrays - Array Functions]()\n- [ 1.26 - PHP.INI - Configuration File]()\n- [ 1.27 - Error Handling]()\n- [ 1.28 - Apache Configuration \u0026 Virtual Hosts]()\n- [ 1.29 - Work With File System]()\n- [ 1.30 - Mini Exercise Project]()\n- [ 1.31 - Mini Exercise Project Solution]()\n\n# Section 2 - Intermediate PHP (OOP)\n\n- [ 2.0 - Intro to Object Oriented PHP]()\n- [ 2.1 - Docker - Nginx - FPM]()\n- [ 2.2 - Classes \u0026 Objects]()\n- [ 2.3 - Constructor Property Promotion]()\n- [ 2.4 - Namespaces]()\n- [ 2.5 - Composer - PSR - Autoloading]()\n- [ 2.6 - Class Constants]()\n- [ 2.7 - Static Properties \u0026 Methods]()\n- [ 2.8 - OOP Principles - Encapsulation \u0026 Abstraction]()\n- [ 2.9 - Inheritance]()\n- [ 2.10 - Abstract Classes \u0026 Methods]()\n- [ 2.11 - Interfaces \u0026 Polymorphism]()\n- [ 2.12 - Magic Methods]()\n- [ 2.13 - Late Static Binding]()\n- [ 2.14 - Traits]()\n- [ 2.15 - Anonymous Classes]()\n- [ 2.16 - Object Comparison - Variable Storage \u0026 Zend Value (zval) Container]()\n- [ 2.17 - DocBlock]()\n- [ 2.18 - Object Cloning]()\n- [ 2.19 - Object Serialization]()\n- [ 2.20 - Exceptions]()\n- [ 2.21 - DateTime Object]()\n- [ 2.22 - Iterable Data Type \u0026 Iterators]()\n- [ 2.23 - Superglobals - Basic Routing Using \\$\\_SERVER Info]()\n- [ 2.24 - Superglobals - \\$\\_GET/\\$\\_POST - Forms]()\n- [ 2.25 - Superglobals - Sessions \u0026 Cookies - Output Buffering]()\n- [ 2.26 - Superglobals - \\$\\_FILES - File Uploads]()\n- [ 2.27 - Intro to MVC]()\n- [ 2.28 - HTTP Headers]()\n- [ 2.29 - Intro to MySQL]()\n- [ 2.30 - PDO Part 1 - Prepared Statements - SQL Injection]()\n- [ 2.31 - PDO Part 2 - Transactions - ENV Variables]()\n- [ 2.32 - PDO Part 3 - Models \u0026 Refactoring]()\n- [ 2.33 - Section 2 Review \u0026 Exercise Project]()\n\n# Section 3 - Advanced PHP (OOP)\n\n- [ 3.0 - Intro to Testing]()\n- [ 3.1 - Unit Testing - PHPUnit Part 1]()\n- [ 3.2 - Mocking - PHPUnit Part 2]()\n- [ 3.3 - Dependency Injection \u0026 DI Containers]()\n- [ 3.4 - DI Container With \u0026 Without Reflection API]()\n- [ 3.5 - DI Container With Interface Support]()\n- [ 3.6 - Generators]()\n- [ 3.7 - WeakMap]()\n- [ 3.8 - New In PHP 8.1]()\n- [ 3.9 - Covariance \u0026 Contravariance]()\n- [ 3.10 - Attributes - Simple Router With Attributes]()\n- [ 3.11 - Enums]()\n- [ 3.12 - Composition vs Inheritance]()\n- [ 3.13 - Send Emails - Symfony Mailer]()\n- [ 3.14 - Schedule Emails - CRON]()\n- [ 3.15 - Intro to Doctrine - DataBase Abstraction Layer - DBAL]()\n- [ 3.16 - Doctrine ORM - Entities \u0026 Data Mapper Pattern]()\n- [ 3.17 - Doctrine ORM Query Builder \u0026 DQL]()\n- [ 3.18 - Doctrine Migrations]()\n- [ 3.19 - Active Record Pattern \u0026 Intro To Laravel Eloquent]()\n- [ 3.20 - Refactor to use Eloquent instead of Doctrine DBAL]()\n- [ 3.21 - PHP cURL API Tutorial \u0026 Emailable API Integration]()\n- [ 3.22 - Refactor cURL to Guzzle With Retry Logic - Multiple API Integrations]()\n- [ 3.23 - Data Transfer Objects - What Are DTOs]()\n- [ 3.24 - Value Objects Practical Example]()\n- [ 3.25 - Intro to Templating Engines - Blade \u0026 Twig]()\n- [ 3.26 - How To Install Xdebug 3 with Docker \u0026 PhpStorm]()\n- [ 3.27 - How To Deploy Vanilla PHP To Cloudways]()\n- [ 3.28 - Intro to Slim PHP Framework]()\n- [ 3.29 - Add DI Container \u0026 Doctrine ORM To Slim PHP Framework]()\n- [ 3.30 - Little Refactoring Never Hurt Nobody]()\n- [ 3.31 - Create \u0026 Run CLI Commands With Symfony Console]()\n- [ 3.32 - 100th Video In This PHP Series - Project Overview]()\n\n# Section P - Project Expennies\n\n- [ P.0 - Expennies Project Setup - NPM \u0026 Webpack]()\n- [ P.1 - Let's Do Some Data Modeling \u0026 Create Entities]()\n- [ P.2 - User Registration \u0026 Password Hashing]()\n- [ P.3 - Add Form Validation]()\n- [ P.4 - Flash Errors \u0026 Old Form Data To Session]()\n- [ P.5 - Session Based Authentication - Session Hijacking \u0026 Fixation]()\n- [ P.6 - Persist Authenticated User Object Throughout The Request]()\n- [ P.7 - Refactor Sessions \u0026 Create Session Interface]()\n- [ P.8 - Sessions \u0026 Referrer URL Refactor]()\n- [ P.9 - Request Validation - Factory Design Pattern]()\n- [ P.10 - CSRF Explained - What Is Cross Site Request Forgery]()\n- [ P.11 - XSS Explained - What Is Cross Site Scripting]()\n- [ P.12 - Let's Build CRUD Actions For Categories]()\n- [ P.13 - First Ajax Request]()\n- [ P.14 - POST Ajax Request \u0026 CSRF Fields]()\n- [ P.15 - Ajax Request Validation]()\n- [ P.16 - Display Errors Using JavaScript \u0026 Bootstrap]()\n- [ P.17 - DataTables \u0026 Pagination]()\n- [ P.18 - How To Securely Implement Sorting \u0026 Filtering]()\n- [ P.19 - Transactions CRUD Exercise Overview]()\n- [ P.20 - Upload Transaction Receipts With Proper File Validation]()\n- [ P.21 - Open Transaction Receipt Files]()\n- [ P.22 - Import Transactions Exercise Solution Overview]()\n- [ P.23 - Profiling for N+1 Queries]()\n- [ P.24 - Reduce Memory Consumption \u0026 Speed Up Imports]()\n- [ P.25 - Toggle Transaction Review Status - Minor Refactoring]()\n- [ P.26 - Decorating Entity Manager to Avoid Inheritance]()\n- [ P.27 - Implement Route Model Binding With Slim]()\n- [ P.28 - Implement Authorization Using Doctrine Filters]()\n- [ P.29 - Set Up Email Verification For New Users]()\n- [ P.30 - Secure User Verification Using Signed URLs]()\n- [ P.31 - Send Two-Factor Auth Code Via Email]()\n- [ P.32 - Implement Two-Factor Authentication Via Email]()\n- [ P.33 - Implement Forgot Password Functionality]()\n- [ P.34 - Implementing Caching with Redis]()\n- [ P.35 - Implementing Rate Limiting]()\n- [ P.36 - Uploading Files to S3 Bucket]()\n- [ P.37 - Final Exercise - Building Back-End For Dashboard]()\n- [ P.38 - Deploy Expennies To Production Using Laravel Forge]()\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevmuhammadzaki%2Flearn-php-the-right-way","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevmuhammadzaki%2Flearn-php-the-right-way","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevmuhammadzaki%2Flearn-php-the-right-way/lists"}