Complete Modern PHP Developer Course in 2023
Updated to use PHP 8. PHP is one of the most popular programming languages in the world. It powers the entire modern web. It provides millions of high-paying jobs all over the world. That's why you want to learn PHP too. And you came to the right place!
More
Why is this the right PHP course for you?
This is the most complete and in-depth PHP course on Udemy (and maybe the entire internet!). It's an all-in-one package that will take you from the very fundamentals of PHP, all the way to building modern applications.
You will learn modern PHP from the very beginning, step-by-step. I will guide you through practical and fun code examples, important theory about how PHP works behind the scenes, and a beautiful and complete project.
You will become ready to continue learning advanced back-end frameworks like Symfony, Laravel, Code Igniter, or Slim.
You will also learn how to think like a developer, how to plan application features, how to architect your code, how to debug code, and a lot of other real-world skills that you will need in your developer job.
And unlike other courses, this one actually contains beginner, intermediate, advanced, and even expert topics, so you don't have to buy any other course in order to master PHP from the ground up!
By the end of the course, you will have the knowledge and confidence that you need in order to ace your job interviews and become a professional developer.
So what exactly is covered in the course?
- Build a beautiful real-world project for your portfolio! In this project, you will learn how to plan and architect your applications using flowcharts and common PHP patterns
- Master the PHP fundamentals: variables, if/else, operators, boolean logic, functions, arrays, objects, loops, strings, and more
- Learn modern PHP 8 from the beginning: arrow functions, destructuring, spread operator, variadic arguments, nullish coalesing operator, and more
- Deep dive into object-oriented programming: encapsulation, abstraction, inheritance, and polymorphism. This section is like a small standalone course.
- Dive deep into design patterns: MVC, singleton pattern, factory pattern, dependency injection, and PSR concepts.
- Learn modern tools that are used by professional web developers: Composer and Packagist
This is what's also included in the package:
- Up-to-date HD-quality videos, that are easy to search and reference
- Downloadable starter code and final code for each section
- Downloadable free eBook with summaries of the core concepts taught in each section.
- Free support in the course Q&A
- Coding challenges with solutions included.
This course is for you if
- You want to gain a true and deep understanding of PHP
- You have been trying to learn PHP but still don't really understand PHP, or still don't feel confident to code real apps
- You are interested in using a library/framework like Symfony, Laravel, Slim, or Code Igniter in the future
- You already know PHP and are looking for an advanced course. This course includes expert topics!
- You want to get started with programming, PHP is a great first language!
Watch Online Complete Modern PHP Developer Course in 2023
# | Title | Duration |
---|---|---|
1 | What is PHP? | 05:04 |
2 | PHP Environment | 06:43 |
3 | The PHP Interpreter | 05:45 |
4 | Running a PHP Script | 06:45 |
5 | PHP Tags | 03:45 |
6 | The echo Keyword | 05:58 |
7 | Comments | 02:08 |
8 | Variables | 05:21 |
9 | Assignment Operator | 04:12 |
10 | Data Types | 04:36 |
11 | The var_dump Function | 03:11 |
12 | Null Data Type | 03:23 |
13 | Boolean Data Type | 02:29 |
14 | Integers and Floats | 03:44 |
15 | String Data Type | 06:42 |
16 | Arrays | 04:45 |
17 | Associative Arrays | 03:32 |
18 | Multidimensional Arrays | 03:39 |
19 | Type Casting | 07:51 |
20 | Type Juggling | 02:25 |
21 | Arithmetic Operators | 06:24 |
22 | Assignment Operators | 02:27 |
23 | Comparison Operators | 05:42 |
24 | Error Control Operator | 01:34 |
25 | Incrementing and Decrementing Numbers | 02:54 |
26 | Logical Operators | 04:28 |
27 | Operator Precedence | 05:40 |
28 | Constants | 04:58 |
29 | String Concatenation | 03:28 |
30 | Terminology: Expressions | 02:55 |
31 | Control Structures | 08:38 |
32 | Switch Statements | 06:07 |
33 | Match Expressions | 04:32 |
34 | Functions | 04:56 |
35 | Function Parameters | 04:10 |
36 | Function Return Values | 02:25 |
37 | Type Hinting & Union Types | 04:19 |
38 | Strict Types | 02:41 |
39 | Short-Circuiting | 02:53 |
40 | While Loop | 04:57 |
41 | For Loop | 04:40 |
42 | Foreach Loop | 02:58 |
43 | Getting Started with Challenges | 04:48 |
44 | Coding Solution: Resistor Colors | 03:32 |
45 | Coding Solution: Two Fer | 02:40 |
46 | Coding Solution: Leap Year | 05:20 |
47 | Predefined Constants | 05:29 |
48 | Alternative Syntax for Constants | 04:44 |
49 | Unsetting Variables | 04:34 |
50 | Reading the PHP Documentation | 06:27 |
51 | Rounding Numbers | 07:33 |
52 | Alternative if statement syntax | 05:10 |
53 | Avoiding Functions in Conditions | 06:34 |
54 | Including PHP Files | 10:04 |
55 | Variadic Functions | 04:27 |
56 | Named Arguments | 03:00 |
57 | Global Variables | 04:40 |
58 | Static Variables | 02:17 |
59 | Anonymous and Arrow Functions | 08:58 |
60 | Callable Type | 02:17 |
61 | Passing by Reference | 04:40 |
62 | Array Functions | 13:15 |
63 | Destructuring Arrays | 02:20 |
64 | Working with Files | 08:02 |
65 | Exploring the Challenges | 03:24 |
66 | Coding Solution: Robot Name | 04:59 |
67 | Coding Solution: Armstrong Numbers | 06:00 |
68 | Coding Solution: Series | 07:44 |
69 | What is OOP (Object-Oriented Programming)? | 04:50 |
70 | Classes | 05:53 |
71 | Properties | 05:47 |
72 | Magic Methods | 05:26 |
73 | Constructor Property Promotion | 01:58 |
74 | Custom Methods | 03:56 |
75 | Null-safe Operator | 02:23 |
76 | Understanding Namespaces | 02:49 |
77 | Creating a Namespace | 03:46 |
78 | Working with Namespaces | 09:49 |
79 | Autoloading Classes | 06:06 |
80 | Using Constants in Classes | 02:15 |
81 | Static Properties and Methods | 05:43 |
82 | OOP Principle: Encapsulation | 07:46 |
83 | OOP Principle: Abstraction | 02:35 |
84 | OOP Principle: Inheritance | 05:46 |
85 | Protected Modifier | 02:00 |
86 | Overriding Methods | 09:13 |
87 | Abstract Classes and Methods | 09:38 |
88 | Interfaces | 05:07 |
89 | OOP Principle: Polymorphism | 07:23 |
90 | Anonymous Classes | 03:53 |
91 | Docblocks | 05:53 |
92 | Throwing Exceptions | 06:55 |
93 | Custom Exceptions | 03:55 |
94 | Catching Exceptions | 05:34 |
95 | The DateTime Class | 11:34 |
96 | Iterator and Iterable Type | 12:20 |
97 | OOP Challenges Overview | 01:46 |
98 | Coding Solution: Nucleotide Count | 02:29 |
99 | Coding Solution: Grade School | 05:58 |
100 | Project Overview | 04:51 |
101 | Text Editors | 03:56 |
102 | Understanding the LAMP stack | 05:39 |
103 | Exploring XAMPP | 02:42 |
104 | The htdocs Folder | 05:27 |
105 | Configuring Virtual Hosts in Apache | 11:19 |
106 | Configuring PHP | 04:37 |
107 | Creating an Application Class | 04:18 |
108 | Bootstrapping an Application | 04:25 |
109 | The Command Line | 06:55 |
110 | Understanding PSR | 03:09 |
111 | Installing Composer | 07:08 |
112 | JSON Crash Course | 05:04 |
113 | Initializing Composer | 07:13 |
114 | Generating Autoload Files | 03:15 |
115 | Including Autoload Files | 02:25 |
116 | What is Git? | 02:38 |
117 | Using GitHub | 06:16 |
118 | Exploring Git Files | 05:54 |
119 | Understanding Routing | 03:57 |
120 | Apache Mod Rewrite | 07:27 |
121 | The htaccess File | 06:14 |
122 | Sugar Functions | 02:55 |
123 | Creating a Router Class | 02:32 |
124 | Adding Routes | 04:56 |
125 | Understanding HTTP Methods | 05:01 |
126 | Supporting HTTP Methods in Routes | 02:29 |
127 | Normalizing Paths | 03:35 |
128 | Exploring Regular Expressions | 07:08 |
129 | Regular Expressions in PHP | 03:05 |
130 | MVC Design Pattern | 06:25 |
131 | Creating a Controller | 01:56 |
132 | Registering Controllers | 02:52 |
133 | Class Magic Constant | 02:44 |
134 | Dispatching a Route | 04:38 |
135 | Finding Matches with Regular Expressions | 04:28 |
136 | Instantiating Classes with Strings | 02:57 |
137 | PSR-12 Auto Formatting | 05:15 |
138 | Understanding Template Engines | 02:39 |
139 | Creating a Template Engine Class | 02:08 |
140 | Setting a Base Path | 04:28 |
141 | Rendering a Template | 02:59 |
142 | Extracting Arrays | 03:55 |
143 | Understanding Output Buffering | 04:33 |
144 | Creating an Output Buffer | 02:50 |
145 | Loading Assets | 03:24 |
146 | Adding Partials | 04:14 |
147 | Exercise: Creating an About Page | 04:47 |
148 | Escaping Data | 07:30 |
149 | Autoloading Functions | 04:57 |
150 | Understanding Dependency Injection | 03:31 |
151 | Creating a Container | 02:33 |
152 | External Definitions File | 04:41 |
153 | Factory Design Pattern | 04:09 |
154 | Merging Arrays | 02:20 |
155 | Reflective Programming | 06:56 |
156 | Validating Classes | 03:33 |
157 | Validating the Constructor Method | 02:29 |
158 | Retrieving the Constructor Parameters | 02:24 |
159 | Validating Parameters | 06:38 |
160 | Invoking Factory Functions | 04:42 |
161 | Instantiating a Class with Dependencies | 03:36 |
162 | Understanding Middleware | 03:11 |
163 | Supporting Router Middleware | 02:37 |
164 | Adding Middleware | 02:28 |
165 | Creating Middleware | 01:56 |
166 | Interface Contracts | 04:02 |
167 | Chaining Callback Functions | 04:06 |
168 | Looping through Middleware | 03:09 |
169 | Supporting Dependency Injection in Middleware | 02:14 |
170 | Global Template Variables | 03:06 |
171 | Singleton Pattern | 07:33 |
172 | Preparing the Registration Form | 04:56 |
173 | Configuring the Form | 06:52 |
174 | Handling POST Data | 03:02 |
175 | Understanding Services | 04:16 |
176 | Creating a Validator Class | 05:38 |
177 | Validation Rule Contract | 05:42 |
178 | Registering a Rule | 04:25 |
179 | Applying Rules to Fields | 07:57 |
180 | Storing Validation Errors | 03:05 |
181 | Custom Validation Exception | 05:57 |
182 | HTTP Status Codes | 05:00 |
183 | Custom Middleware | 03:48 |
184 | Redirection with Headers | 06:25 |
185 | Passing on the Errors | 03:19 |
186 | HTTP Referrer | 02:48 |
187 | Understanding Sessions | 02:23 |
188 | Enabling Sessions | 04:20 |
189 | Handling Session Exceptions | 04:03 |
190 | Common Session Error | 06:16 |
191 | Closing the Session Early | 01:06 |
192 | Injecting Errors into a Template | 05:12 |
193 | Flashing Errors | 01:57 |
194 | Displaying Errors | 03:00 |
195 | Validating Emails | 04:38 |
196 | Supporting Rule Parameters | 05:38 |
197 | Minimum Validation Rule | 03:51 |
198 | In Validation Rule | 03:30 |
199 | Exercise: URL Validation Rule | 02:58 |
200 | Password Matching Rule | 03:45 |
201 | Prefilling a Form | 06:01 |
202 | Filtering Sensitive Data | 03:50 |
203 | Introduction to SQL | 05:29 |
204 | Creating a Database | 02:32 |
205 | Creating Tables | 09:12 |
206 | Inserting Data | 04:06 |
207 | Reading Data | 03:42 |
208 | Updating Data | 01:56 |
209 | Deleting Data | 02:18 |
210 | Using PHPMyAdmin | 07:44 |
211 | Enabling PDO Extension | 04:27 |
212 | Custom Composer Scripts | 03:46 |
213 | Understanding DSN | 01:44 |
214 | Creating a DSN String | 06:04 |
215 | Connecting to a Database | 03:00 |
216 | The PDOException Class | 03:42 |
217 | Refactoring the Database Connection | 05:13 |
218 | Querying the Database | 04:30 |
219 | Fetch Modes | 04:09 |
220 | SQL Injections | 05:27 |
221 | Prepared Statements | 05:46 |
222 | Understanding Transactions | 03:08 |
223 | Creating Transactions with PDO | 04:18 |
224 | Understanding Data Modeling | 03:57 |
225 | Designing a User Table | 10:10 |
226 | Creating a Table in an SQL File | 06:07 |
227 | Loading Files | 02:24 |
228 | Conditionally Creating Tables | 02:09 |
229 | Refactoring the Query | 02:24 |
230 | Database Container Definition | 01:32 |
231 | Understanding Environment Variables | 05:38 |
232 | Creating Environment Variables | 05:21 |
233 | Ignoring Environment Files | 01:59 |
234 | Passing on the Container to Definitions | 04:30 |
235 | Counting Records with SQL | 02:54 |
236 | Supporting Prepared Statements | 02:07 |
237 | Validating Duplicate Emails | 04:44 |
238 | Exercise: Inserting a User | 04:19 |
239 | Understanding Hashing | 05:32 |
240 | Hashing a Password | 05:29 |
241 | Preparing the Login Page | 02:52 |
242 | Exercise: Validating the Login Form | 07:00 |
243 | Validating the User’s Credentials | 09:45 |
244 | Understanding Session Hijacking | 03:18 |
245 | Configuring Session Cookies | 06:25 |
246 | Regenerating a Session ID | 01:51 |
247 | Protecting Routes | 03:47 |
248 | Applying Route Middleware | 07:01 |
249 | Logging out of the Application | 02:55 |
250 | Authenticating Registered Users | 02:44 |
251 | Understanding CSRF | 02:08 |
252 | Generating a CSRF Token | 04:30 |
253 | Rendering Tokens | 03:10 |
254 | Validating CSRF Tokens | 07:12 |
255 | Conditionally Rendering Sections | 01:55 |
256 | Designing the Transactions Table | 03:43 |
257 | Understanding Database Relationships | 05:47 |
258 | Adding Foreign Keys | 06:33 |
259 | Preparing the Create Transaction Page | 04:11 |
260 | Validating Transactions | 03:53 |
261 | Validating Maximum Character Length | 04:28 |
262 | Validating Numbers | 02:42 |
263 | Validating Dates | 04:51 |
264 | Creating a Transaction | 07:05 |
265 | Retrieving Transactions | 06:08 |
266 | Formatting Dates with SQL | 03:30 |
267 | Query Parameters | 05:48 |
268 | SQL LIKE Clause | 03:11 |
269 | Filtering Transactions | 01:35 |
270 | Escaping the Search Term | 01:59 |
271 | SQL Limit Clause | 02:30 |
272 | Limiting Results | 05:09 |
273 | Previous Page Link | 04:21 |
274 | Next Page Link | 05:56 |
275 | Page Number Links | 07:08 |
276 | Preparing the Edit Route | 06:02 |
277 | Replacing Strings with Regular Expressions | 06:17 |
278 | Extracting Route Parameter Values | 06:50 |
279 | Edit Transaction Template | 07:16 |
280 | Updating a Transaction | 06:52 |
281 | Overriding HTTP Methods | 05:56 |
282 | Deleting a Transaction | 03:20 |
283 | Preparing the Receipt Controller | 03:57 |
284 | Encoding File Data | 02:39 |
285 | Exercise: Creating a Receipt Service | 06:26 |
286 | Validating a File Upload | 03:36 |
287 | Validating File Sizes | 02:51 |
288 | Validating Filenames | 03:43 |
289 | Validating File Mime Types | 03:50 |
290 | Generating a Random Filename | 03:37 |
291 | Moving Uploaded Files | 04:53 |
292 | Designing the Receipts Table | 04:57 |
293 | Storing the Receipt | 03:01 |
294 | Displaying Receipts | 07:45 |
295 | Validating the Download Request | 04:14 |
296 | Downloading Files | 06:32 |
297 | Deleting a Receipt | 04:35 |
298 | Magic Numbers | 05:55 |
299 | Destroying Session Cookies | 05:50 |
300 | Rendering a 404 Page | 07:11 |
301 | Understanding Deployment | 03:37 |
302 | Configuring a Server | 08:45 |
303 | Configuring an Application | 02:24 |
304 | Setting up our Project | 13:24 |
305 | Conclusion | 01:25 |