Learn modern PHP and become a better developer. This is the only PHP course you need to go from complete beginner to coding your own PHP applications and working with existing PHP applications.
PHP Development Bootcamp: Zero to Mastery
Learn modern PHP. We guarantee you that this is the most comprehensive and up-to-date PHP Bootcamp course to go from absolute beginner to mastering PHP web development, getting hired, and advancing your career.
Additional
About the Author: Zero To Mastery
Zero To Mastery (ZTM) is a Toronto-based online coding academy founded by Andrei Neagoie, originally a senior developer at large Canadian tech firms before turning to teaching full-time. The academy's signature is the cohort-based bootcamp track combined with a deep self-paced course library, all aimed at career-changers and self-taught developers preparing to land software-engineering roles at top companies.
The instructor roster has grown well beyond Andrei to include other senior practitioners: Daniel Bourke (machine learning), Aleksa Tešić (DevOps), Jacinto Wong, and others. Courses cover the full software-engineering career path: web development with React and Next.js, Python, machine learning and deep learning, DevOps and cloud, system design, mobile, and the algorithm / data-structure interview prep that gates engineering jobs.
The CourseFlix listing under this source carries over 120 ZTM courses spanning that full range. Material is paid; ZTM itself runs on a monthly / annual membership model. The teaching style favours long-form, project-based courses where students build complete portfolio-quality applications rather than disconnected feature tutorials.
Watch Online 308 lessons
| # | Lesson Title | Duration | Access |
|---|---|---|---|
| 1 | Learn PHP with Luis Ramirez Demo | 00:55 | |
| 2 | What is PHP? | 03:16 | |
| 3 | PHP Environment | 06:43 | |
| 4 | The PHP Interpreter | 05:45 | |
| 5 | Running a PHP Script | 06:45 | |
| 6 | PHP Tags | 03:45 | |
| 7 | The echo Keyword | 05:58 | |
| 8 | Comments | 02:08 | |
| 9 | Variables | 05:21 | |
| 10 | Assignment Operator | 04:12 | |
| 11 | Data Types | 04:36 | |
| 12 | The var_dump Function | 03:11 | |
| 13 | Null Data Type | 03:23 | |
| 14 | Boolean Data Type | 02:29 | |
| 15 | Integers and Floats | 03:44 | |
| 16 | String Data Type | 06:42 | |
| 17 | Arrays | 04:45 | |
| 18 | Associative Arrays | 03:32 | |
| 19 | Multidimensional Arrays | 03:39 | |
| 20 | Type Casting | 07:52 | |
| 21 | Type Juggling | 02:25 | |
| 22 | Arithmetic Operators | 06:23 | |
| 23 | Assignment Operators | 02:27 | |
| 24 | Comparison Operators | 05:42 | |
| 25 | Error Control Operator | 01:34 | |
| 26 | Incrementing and Decrementing Numbers | 02:54 | |
| 27 | Logical Operators | 04:28 | |
| 28 | Operator Precedence | 05:40 | |
| 29 | Constants | 04:58 | |
| 30 | String Concatenation | 03:28 | |
| 31 | Terminology: Expressions | 02:55 | |
| 32 | Control Structures | 08:38 | |
| 33 | Switch Statements | 06:07 | |
| 34 | Match Expressions | 04:31 | |
| 35 | Functions | 04:56 | |
| 36 | Function Parameters | 04:10 | |
| 37 | Function Return Values | 02:25 | |
| 38 | Type Hinting & Union Types | 04:19 | |
| 39 | Strict Types | 02:41 | |
| 40 | Short-Circuiting | 02:53 | |
| 41 | While Loop | 04:58 | |
| 42 | For Loop | 04:41 | |
| 43 | Foreach Loop | 02:59 | |
| 44 | Getting Started with Challenges | 04:24 | |
| 45 | Coding Solution: Resistor Colors | 03:28 | |
| 46 | Coding Solution: Two Fer | 02:41 | |
| 47 | Coding Solution: Leap Year | 05:15 | |
| 48 | Predefined Constants | 05:31 | |
| 49 | Alternative Syntax for Constants | 04:45 | |
| 50 | Unsetting Variables | 04:36 | |
| 51 | Reading the PHP Documentation | 06:29 | |
| 52 | Rounding Numbers | 07:35 | |
| 53 | Alternative if statement syntax | 05:11 | |
| 54 | Avoiding Functions in Conditions | 06:36 | |
| 55 | Including PHP Files | 10:06 | |
| 56 | Variadic Functions | 04:29 | |
| 57 | Named Arguments | 03:01 | |
| 58 | Global Variables | 04:41 | |
| 59 | Static Variables | 02:18 | |
| 60 | Anonymous and Arrow Functions | 08:59 | |
| 61 | Callable Type | 02:18 | |
| 62 | Passing by Reference | 04:42 | |
| 63 | Array Functions | 13:16 | |
| 64 | Destructuring Arrays | 02:22 | |
| 65 | Working with Files | 08:03 | |
| 66 | Exploring the Challenges | 03:08 | |
| 67 | Coding Solution: Robot Name | 05:01 | |
| 68 | Coding Solution: Armstrong Numbers | 05:49 | |
| 69 | Coding Solution: Series | 07:45 | |
| 70 | What is OOP (Object-Oriented Programming)? | 04:52 | |
| 71 | Classes | 05:54 | |
| 72 | Properties | 05:48 | |
| 73 | Magic Methods | 05:28 | |
| 74 | Constructor Property Promotion | 01:59 | |
| 75 | Custom Methods | 03:57 | |
| 76 | Null-safe Operator | 02:24 | |
| 77 | Understanding Namespaces | 02:51 | |
| 78 | Creating a Namespace | 03:48 | |
| 79 | Working with Namespaces | 09:51 | |
| 80 | Autoloading Classes | 06:07 | |
| 81 | Using Constants in Classes | 02:16 | |
| 82 | Static Properties and Methods | 05:45 | |
| 83 | OOP Principle: Encapsulation | 07:47 | |
| 84 | OOP Principle: Abstraction | 02:36 | |
| 85 | OOP Principle: Inheritance | 05:47 | |
| 86 | Protected Modifier | 02:01 | |
| 87 | Overriding Methods | 09:14 | |
| 88 | Abstract Classes and Methods | 09:39 | |
| 89 | Interfaces | 05:08 | |
| 90 | OOP Principle: Polymorphism | 07:24 | |
| 91 | Anonymous Classes | 03:55 | |
| 92 | Docblocks | 05:54 | |
| 93 | Throwing Exceptions | 06:57 | |
| 94 | Custom Exceptions | 03:56 | |
| 95 | Catching Exceptions | 05:35 | |
| 96 | The DateTime Class | 11:35 | |
| 97 | Iterator and Iterable Type | 12:21 | |
| 98 | OOP Challenges Overview | 01:41 | |
| 99 | Coding Solution: Nucleotide Count | 02:33 | |
| 100 | Coding Solution: Grade School | 05:59 | |
| 101 | Project Overview | 04:53 | |
| 102 | Text Editors | 03:57 | |
| 103 | Understanding the LAMP stack | 05:41 | |
| 104 | Exploring XAMPP | 02:43 | |
| 105 | The htdocs Folder | 05:28 | |
| 106 | Configuring Virtual Hosts in Apache | 11:20 | |
| 107 | Configuring PHP | 04:38 | |
| 108 | Creating an Application Class | 04:19 | |
| 109 | Bootstrapping an Application | 04:26 | |
| 110 | The Command Line | 06:57 | |
| 111 | Understanding PSR | 03:10 | |
| 112 | Installing Composer | 07:09 | |
| 113 | JSON Crash Course | 05:06 | |
| 114 | Initializing Composer | 07:14 | |
| 115 | Generating Autoload Files | 03:16 | |
| 116 | Including Autoload Files | 02:26 | |
| 117 | What is Git? | 02:40 | |
| 118 | Using GitHub | 06:18 | |
| 119 | Exploring Git Files | 05:55 | |
| 120 | Exercise: Imposter Syndrome | 02:57 | |
| 121 | Understanding Routing | 03:58 | |
| 122 | Apache Mod Rewrite | 07:28 | |
| 123 | The htaccess File | 06:16 | |
| 124 | Sugar Functions | 02:57 | |
| 125 | Creating a Router Class | 02:33 | |
| 126 | Adding Routes | 04:57 | |
| 127 | Understanding HTTP Methods | 05:02 | |
| 128 | Supporting HTTP Methods in Routes | 02:30 | |
| 129 | Normalizing Paths | 03:36 | |
| 130 | Exploring Regular Expressions | 07:10 | |
| 131 | Regular Expressions in PHP | 03:07 | |
| 132 | MVC Design Pattern | 06:26 | |
| 133 | Creating a Controller | 01:57 | |
| 134 | Registering Controllers | 02:53 | |
| 135 | Class Magic Constant | 02:46 | |
| 136 | Dispatching a Route | 04:40 | |
| 137 | Finding Matches with Regular Expressions | 04:29 | |
| 138 | Instantiating Classes with Strings | 02:59 | |
| 139 | PSR-12 Auto Formatting | 05:16 | |
| 140 | Understanding Template Engines | 02:41 | |
| 141 | Creating a Template Engine Class | 02:09 | |
| 142 | Setting a Base Path | 04:30 | |
| 143 | Rendering a Template | 03:01 | |
| 144 | Extracting Arrays | 03:57 | |
| 145 | Understanding Output Buffering | 04:35 | |
| 146 | Creating an Output Buffer | 02:51 | |
| 147 | Loading Assets | 03:26 | |
| 148 | Adding Partials | 04:15 | |
| 149 | Exercise: Creating an About Page | 04:48 | |
| 150 | Escaping Data | 07:31 | |
| 151 | Autoloading Functions | 04:58 | |
| 152 | Understanding Dependency Injection | 03:32 | |
| 153 | Creating a Container | 02:35 | |
| 154 | External Definitions File | 04:41 | |
| 155 | Factory Design Pattern | 04:10 | |
| 156 | Merging Arrays | 02:21 | |
| 157 | Reflective Programming | 06:57 | |
| 158 | Validating Classes | 03:34 | |
| 159 | Validating the Constructor Method | 02:29 | |
| 160 | Retrieving the Constructor Parameters | 02:25 | |
| 161 | Validating Parameters | 06:39 | |
| 162 | Invoking Factory Functions | 04:43 | |
| 163 | Instantiating a Class with Dependencies | 03:37 | |
| 164 | Understanding Middleware | 03:12 | |
| 165 | Supporting Router Middleware | 02:38 | |
| 166 | Adding Middleware | 02:28 | |
| 167 | Creating Middleware | 01:53 | |
| 168 | Interface Contracts | 04:03 | |
| 169 | Chaining Callback Functions | 04:07 | |
| 170 | Looping through Middleware | 03:10 | |
| 171 | Supporting Dependency Injection in Middleware | 02:15 | |
| 172 | Global Template Variables | 03:07 | |
| 173 | Singleton Pattern | 07:34 | |
| 174 | Preparing the Registration Form | 04:56 | |
| 175 | Configuring the Form | 06:52 | |
| 176 | Handling POST Data | 03:03 | |
| 177 | Understanding Services | 04:17 | |
| 178 | Creating a Validator Class | 05:39 | |
| 179 | Validation Rule Contract | 05:43 | |
| 180 | Registering a Rule | 04:26 | |
| 181 | Applying Rules to Fields | 07:58 | |
| 182 | Storing Validation Errors | 03:06 | |
| 183 | Custom Validation Exception | 05:58 | |
| 184 | HTTP Status Codes | 05:00 | |
| 185 | Custom Middleware | 03:49 | |
| 186 | Redirection with Headers | 06:26 | |
| 187 | Passing on the Errors | 03:19 | |
| 188 | HTTP Referrer | 02:49 | |
| 189 | Understanding Sessions | 02:24 | |
| 190 | Enabling Sessions | 04:21 | |
| 191 | Handling Session Exceptions | 04:04 | |
| 192 | Common Session Error | 06:17 | |
| 193 | Closing the Session Early | 01:06 | |
| 194 | Injecting Errors into a Template | 05:13 | |
| 195 | Flashing Errors | 01:58 | |
| 196 | Displaying Errors | 03:01 | |
| 197 | Validating Emails | 04:39 | |
| 198 | Supporting Rule Parameters | 05:39 | |
| 199 | Minimum Validation Rule | 03:52 | |
| 200 | In Validation Rule | 03:31 | |
| 201 | Exercise: URL Validation Rule | 02:58 | |
| 202 | Password Matching Rule | 03:46 | |
| 203 | Prefilling a Form | 06:02 | |
| 204 | Filtering Sensitive Data | 03:50 | |
| 205 | Introduction to SQL | 05:30 | |
| 206 | Creating a Database | 02:32 | |
| 207 | Creating Tables | 09:13 | |
| 208 | Inserting Data | 04:06 | |
| 209 | Reading Data | 03:42 | |
| 210 | Updating Data | 01:57 | |
| 211 | Deleting Data | 02:19 | |
| 212 | Using PHPMyAdmin | 07:45 | |
| 213 | Enabling PDO Extension | 04:28 | |
| 214 | Custom Composer Scripts | 03:47 | |
| 215 | Understanding DSN | 01:45 | |
| 216 | Creating a DSN String | 06:05 | |
| 217 | Connecting to a Database | 03:01 | |
| 218 | The PDOException Class | 03:43 | |
| 219 | Refactoring the Database Connection | 05:14 | |
| 220 | Querying the Database | 04:31 | |
| 221 | Fetch Modes | 04:10 | |
| 222 | SQL Injections | 05:28 | |
| 223 | Prepared Statements | 05:47 | |
| 224 | Understanding Transactions | 03:09 | |
| 225 | Creating Transactions with PDO | 04:19 | |
| 226 | Understanding Data Modeling | 03:58 | |
| 227 | Designing a User Table | 10:11 | |
| 228 | Creating a Table in an SQL File | 06:08 | |
| 229 | Loading Files | 02:25 | |
| 230 | Conditionally Creating Tables | 02:09 | |
| 231 | Refactoring the Query | 02:25 | |
| 232 | Database Container Definition | 01:33 | |
| 233 | Understanding Environment Variables | 05:38 | |
| 234 | Creating Environment Variables | 05:22 | |
| 235 | Ignoring Environment Files | 01:59 | |
| 236 | Passing on the Container to Definitions | 04:31 | |
| 237 | Counting Records with SQL | 02:54 | |
| 238 | Supporting Prepared Statements | 02:07 | |
| 239 | Validating Duplicate Emails | 04:45 | |
| 240 | Exercise: Inserting a User | 04:20 | |
| 241 | Understanding Hashing | 05:33 | |
| 242 | Hashing a Password | 05:30 | |
| 243 | Preparing the Login Page | 02:52 | |
| 244 | Exercise: Validating the Login Form | 07:01 | |
| 245 | Validating the User’s Credentials | 09:46 | |
| 246 | Understanding Session Hijacking | 03:19 | |
| 247 | Configuring Session Cookies | 06:26 | |
| 248 | Regenerating a Session ID | 01:52 | |
| 249 | Protecting Routes | 03:48 | |
| 250 | Applying Route Middleware | 07:01 | |
| 251 | Logging out of the Application | 02:56 | |
| 252 | Authenticating Registered Users | 02:44 | |
| 253 | Understanding CSRF | 02:08 | |
| 254 | Generating a CSRF Token | 04:30 | |
| 255 | Rendering Tokens | 03:11 | |
| 256 | Validating CSRF Tokens | 07:12 | |
| 257 | Conditionally Rendering Sections | 01:55 | |
| 258 | Designing the Transactions Table | 03:43 | |
| 259 | Understanding Database Relationships | 05:48 | |
| 260 | Adding Foreign Keys | 06:34 | |
| 261 | Preparing the Create Transaction Page | 04:11 | |
| 262 | Validating Transactions | 03:54 | |
| 263 | Validating Maximum Character Length | 04:29 | |
| 264 | Validating Numbers | 02:42 | |
| 265 | Validating Dates | 04:52 | |
| 266 | Creating a Transaction | 07:05 | |
| 267 | Retrieving Transactions | 06:09 | |
| 268 | Formatting Dates with SQL | 03:31 | |
| 269 | Query Parameters | 05:49 | |
| 270 | SQL LIKE Clause | 03:11 | |
| 271 | Filtering Transactions | 01:36 | |
| 272 | Escaping the Search Term | 01:59 | |
| 273 | SQL Limit Clause | 02:31 | |
| 274 | Limiting Results | 05:09 | |
| 275 | Previous Page Link | 04:21 | |
| 276 | Next Page Link | 05:57 | |
| 277 | Page Number Links | 07:09 | |
| 278 | Preparing the Edit Route | 06:03 | |
| 279 | Replacing Strings with Regular Expressions | 06:18 | |
| 280 | Extracting Route Parameter Values | 06:51 | |
| 281 | Edit Transaction Template | 07:16 | |
| 282 | Updating a Transaction | 06:52 | |
| 283 | Overriding HTTP Methods | 05:56 | |
| 284 | Deleting a Transaction | 03:21 | |
| 285 | Preparing the Receipt Controller | 03:58 | |
| 286 | Encoding File Data | 02:40 | |
| 287 | Exercise: Creating a Receipt Service | 06:26 | |
| 288 | Validating a File Upload | 03:37 | |
| 289 | Validating File Sizes | 02:52 | |
| 290 | Validating Filenames | 03:44 | |
| 291 | Validating File Mime Types | 03:51 | |
| 292 | Generating a Random Filename | 03:37 | |
| 293 | Moving Uploaded Files | 04:54 | |
| 294 | Designing the Receipts Table | 04:57 | |
| 295 | Storing the Receipt | 03:01 | |
| 296 | Displaying Receipts | 07:45 | |
| 297 | Validating the Download Request | 04:14 | |
| 298 | Downloading Files | 06:32 | |
| 299 | Deleting a Receipt | 04:35 | |
| 300 | Magic Numbers | 05:55 | |
| 301 | Destroying Session Cookies | 05:51 | |
| 302 | Rendering a 404 Page | 07:11 | |
| 303 | Configuring a Server | 08:46 | |
| 304 | Understanding Deployment | 03:37 | |
| 305 | Configuring an Application | 02:25 | |
| 306 | Setting up our Project | 13:24 | |
| 307 | Conclusion | 01:25 | |
| 308 | Thank You! | 01:18 |
Get instant access to all 307 lessons in this course, plus thousands of other premium courses. One subscription, unlimited knowledge.
Learn more about subscriptionBooks
Related courses
-
Updated 3y agoBuild a Placekitten clone with Silex
By: CodecoursePlacekitten's API generates image placeholders of cute cats in any size for development. Let's rebuild it.34m -
Updated 2y agoPHP with Laravel - Create a Restaurant Management System
By: UdemyWelcome to the PHP with Laravel - Create a Restaurant Management System. The course covers the concepts of using PHP and Laravel Framework to build an innovativ9h 39m -
Updated 3y agoDocker for PHP Developers
By: Udemy"Docker for PHP Developers" is a book and video course that will teach you how to use Docker and PHP to create clean.7h 35m