27
27
* [ Object-oriented programming] ( #object-oriented-programming )
28
28
* [ Design patterns] ( #design-patterns )
29
29
* [ Best Practices] ( #best-practices )
30
- * [ Architecture] ( #architecture )
31
- * [ Domain Driven Design (DDD)] ( #domain-driven-design-ddd )
32
30
* [ Templating] ( #templating )
33
31
* [ View libraries (frontend)] ( #view-libraries-frontend )
34
32
* [ Database basics] ( #database-basics )
42
40
* [ Database tools] ( #database-tools )
43
41
* [ Standards] ( #standards )
44
42
* [ Errors and exception handling] ( #errors-and-exception-handling )
43
+ * [ Debugging] ( #debugging )
45
44
* [ Unit testing] ( #unit-testing )
46
45
* [ Documentation] ( #documentation )
47
46
* [ PHP Sessions] ( #php-sessions )
50
49
* [ Dependency injection] ( #dependency-injection )
51
50
* [ Version control] ( #version-control )
52
51
* [ Security] ( #security )
52
+ * [ Architecture] ( #architecture )
53
+ * [ Domain Driven Design (DDD)] ( #domain-driven-design-ddd )
53
54
* [ Continuous integration and Continuous Delivery] ( #continuous-integration-ci-and-continuous-delivery-cd )
54
55
* [ Community and News] ( #community--news )
55
56
@@ -139,7 +140,6 @@ The [LAMP](https://en.wikipedia.org/wiki/LAMP_(software_bundle)) stack:
139
140
## Tools
140
141
* [ XAMPP] ( https://www.apachefriends.org/index.html ) (Apache, MariaDB, PHP)
141
142
* [ Composer] ( https://getcomposer.org/ ) (dependency management)
142
- * [ Xdebug] ( https://xdebug.org/ ) (Debugger) | [ Xdebug Setup] ( https://gist.github.com/odan/1abe76d373a9cbb15bed )
143
143
* [ WinSCP] ( https://winscp.net ) (Free SFTP, SCP and FTP client)
144
144
* [ Putty] ( https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html ) (A free SSH and telnet client)
145
145
* [ PoEdit] ( https://poedit.net/ ) (gettext translations editor)
@@ -231,39 +231,47 @@ Most frameworks in PHP follow some sort of MVC structure. The theory is simple:
231
231
232
232
## Best Practices
233
233
234
- > "DRY ‐ Don't Repeat Yourself<br >
235
- > Every piece of knowledge must have a single, <br >
236
- > unambiguous, athoritative representation within a system."
234
+ ### KISS
235
+
236
+ > Simplicity is prerequisite for reliability.<br >
237
+ > — Edsger W. Dijkstra
237
238
238
239
* [ KISS - Keep it simple, stupid] ( https://en.wikipedia.org/wiki/KISS_principle )
239
240
* [ KISS principle] ( https://people.apache.org/~fhanik/kiss.html )
241
+
242
+ ### YAGNI
243
+
240
244
* [ YAGNI] ( http://deviq.com/yagni/ )
241
245
* [ You Arent Gonna Need It] ( http://c2.com/xp/YouArentGonnaNeedIt.html )
242
246
* [ KISS and YAGNI] ( https://blog.codinghorror.com/kiss-and-yagni/ )
243
247
* [ YAGNI, Cargo Cult and Overengineering] ( https://codeahoy.com/2017/08/19/yagni-cargo-cult-and-overengineering-the-planes-wont-land-just-because-you-built-a-runway-in-your-backyard/ )
248
+
249
+ ### DRY
250
+
251
+ > "DRY ‐ Don't Repeat Yourself<br >
252
+ > Every piece of knowledge must have a single, <br >
253
+ > unambiguous, athoritative representation within a system."
254
+
244
255
* [ Don’t repeat yourself (DRY)] ( https://en.wikipedia.org/wiki/Don't_repeat_yourself )
245
- * [ Return early, return often ] ( https://softwareengineering.stackexchange.com/q/18454 )
246
- * [ Global Variables Are Bad ] ( http://stackoverflow.com/a/10525602 )
247
- * [ Thin controllers and fat models ] ( http://symfony.com/doc/current/best_practices/controllers.html )
256
+
257
+ ### SOLID
258
+
248
259
* [ SOLID] ( https://en.wikipedia.org/wiki/SOLID_(object-oriented_design) )
249
260
* [ The First 5 Principles of Object Oriented Design] ( https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design )
250
261
* [ How to write SOLID code that doesn’t suck] ( https://medium.com/web-engineering-vox/how-to-write-solid-code-that-doesnt-suck-2a3416623d48#.61pr1ym4b )
262
+
263
+ ### Other
264
+
265
+ * [ Return early, return often] ( https://softwareengineering.stackexchange.com/q/18454 )
266
+ * [ Global Variables Are Bad] ( http://stackoverflow.com/a/10525602 )
267
+ * [ Thin controllers and fat models] ( http://symfony.com/doc/current/best_practices/controllers.html )
251
268
* [ PHP Dos and Don’ts aka Programmers I Don’t Like] ( https://blog.radwell.codes/2016/11/php-dos-donts-aka-programmers-dont-like/ )
252
269
* [ Composition over inheritance] ( https://www.thoughtworks.com/pt/insights/blog/composition-vs-inheritance-how-choose )
253
270
* [ Clean Code PHP] ( https://github.com/jupeter/clean-code-php )
254
271
* [ Object Calisthenics] ( https://medium.com/web-engineering-vox/improving-code-quality-with-object-calisthenics-aa4ad67a61f1#.ggel1wt46 )
255
272
256
- ## Architecture
257
-
258
- * [ The Clean Architecture] ( https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html )
259
- * [ Creating services you won’t hate] ( https://www.brandonsavage.net/creating-services-you-wont-hate/ )
260
-
261
- ## Domain Driven Design (DDD)
262
-
263
- * [ Domain-Driven Design: Tackling Complexity in the Heart of Software] ( https://www.amazon.de/gp/product/0321125215/ref=as_li_tl?ie=UTF8&tag=28031982-21&camp=1638&creative=6742&linkCode=as2&creativeASIN=0321125215&linkId=16ec2c3b5f11f8f3b4e152c4a25b22c3 )
264
- * [ Implementing Domain-Driven Design] ( https://www.amazon.de/gp/product/0321834577/ref=as_li_tl?ie=UTF8&tag=28031982-21&camp=1638&creative=6742&linkCode=as2&creativeASIN=0321834577&linkId=eb63c6ebb30257011280bf1eab89f1db )
265
-
266
273
## Database basics
274
+
267
275
* [ Database] ( https://en.wikipedia.org/wiki/Database )
268
276
* [ Database model] ( https://en.wikipedia.org/wiki/Database_model )
269
277
* ** [ The only proper PDO tutorial] ( https://phpdelusions.net/pdo ) **
@@ -274,13 +282,15 @@ Most frameworks in PHP follow some sort of MVC structure. The theory is simple:
274
282
* [ Datenbank-Grundlagen Tutorial: Primärschlüssel] ( https://www.youtube.com/watch?v=Mpkg0RnkMkw ) (german)
275
283
276
284
## Relational database management system (RDBMS)
285
+
277
286
* [ MySQL] ( https://en.wikipedia.org/wiki/MySQL ) | [ MySQL website] ( http://dev.mysql.com/downloads/mysql/ )
278
287
* [ MariaDB] ( https://en.wikipedia.org/wiki/MariaDB ) | [ MariaDB website] ( https://mariadb.org/ )
279
288
* [ Microsoft SQL Server] ( https://en.wikipedia.org/wiki/Microsoft_SQL_Server )
280
289
* [ Oracle] ( https://en.wikipedia.org/wiki/Oracle_Database )
281
290
* [ SQLite] ( https://en.wikipedia.org/wiki/SQLite )
282
291
283
292
## Database books
293
+
284
294
* [ High Performance MySQL: Optimization, Backups, and Replication] ( https://www.amazon.com/High-Performance-MySQL-Optimization-Replication/dp/1449314287/?tag=28031982-21 )
285
295
286
296
## Database normalization
@@ -293,18 +303,24 @@ Most frameworks in PHP follow some sort of MVC structure. The theory is simple:
293
303
* [ MySQL - Normalisierung] ( http://www.peterkropff.de/site/mysql/normalisierung.htm ) (german)
294
304
295
305
## Prepared Statements
306
+
296
307
* [ Prepared statement] ( https://en.wikipedia.org/wiki/Prepared_statement )
297
308
* [ Prepared statements - Protection from SQL injections] ( https://phpdelusions.net/pdo#prepared )
298
309
* [ PHP Prepared Statements] ( http://www.w3schools.com/php/php_mysql_prepared_statements.asp )
299
310
300
311
## NoSQL
312
+
301
313
* [ NoSQL] ( https://en.wikipedia.org/wiki/NoSQL )
314
+ * [ Redis] ( https://redis.io/ ) (In-memory data structure store, used as a database, cache and message broker)
315
+ * [ MongoDB] ( https://en.wikipedia.org/wiki/MongoDB ) (Document-oriented database)
302
316
303
317
## Database libraries
318
+
304
319
* [ Phinx - database migrations] ( https://phinx.org/ )
305
320
* [ Illuminate (Laravel) Query Builder] ( https://github.com/illuminate/database )
306
321
307
322
## Database tools
323
+
308
324
* [ SQLyog] ( https://github.com/webyog/sqlyog-community/wiki/Downloads )
309
325
* [ PHPMyAdmin MySQL Database Web Interface] ( https://www.phpmyadmin.net/ )
310
326
* [ MySQL Workbench] ( http://www.mysql.com/products/workbench/ )
@@ -324,13 +340,19 @@ Follow common PHP conventions for object-oriented code, and established industry
324
340
* [ Semantic Versioning 2.0.0] ( https://semver.org/ )
325
341
326
342
## Errors and exception handling
343
+
327
344
* [ Errors and Exceptions] ( https://www.phptherightway.com/#errors_and_exceptions )
328
345
* [ Error Handling PHP Best Practices] ( http://bestpractices.thecodingmachine.com/php/error_handling.html )
329
346
* [ Exceptions] ( http://php.net/manual/en/language.exceptions.php )
330
347
* [ Predefined Exceptions] ( http://php.net/manual/en/reserved.exceptions.php )
331
348
* [ SPL Exceptions] ( http://php.net/manual/en/spl.exceptions.php )
332
349
* [ Errors and error handling] ( http://php.net/manual/en/pdo.error-handling.php )
333
350
351
+ ## Debugging
352
+
353
+ * [ Xdebug] ( https://xdebug.org/ ) (Debugger)
354
+ * [ Installing Xdebug for XAMPP] ( https://gist.github.com/odan/1abe76d373a9cbb15bed )
355
+
334
356
## Unit testing
335
357
336
358
> “Software testers do not make software; they only make them better.” – Anonymous
@@ -360,26 +382,42 @@ Follow common PHP conventions for object-oriented code, and established industry
360
382
* [ Your First Set of Documentation] ( https://phpdoc.org/docs/latest/getting-started/your-first-set-of-documentation.html )
361
383
362
384
## PHP Sessions
385
+
363
386
* [ PHP Sessions] ( http://www.w3schools.com/php/php_sessions.asp )
364
387
* [ Session Handling] ( https://secure.php.net/manual/en/book.session.php )
365
388
* [ Cookie] ( https://en.wikipedia.org/wiki/HTTP_cookie )
366
389
* [ Session Management] ( https://symfony.com/doc/current/components/http_foundation/sessions.html )
367
390
368
391
## Router and Dispatcher
392
+
369
393
* [ FastRoute] ( https://github.com/nikic/FastRoute )
370
394
* [ Symfony: The Routing Component] ( https://symfony.com/doc/current/components/routing.html )
371
395
372
396
## Text translations
397
+
373
398
* [ Internationalization and localization] ( https://en.wikipedia.org/wiki/Internationalization_and_localization ) (i18n)
374
399
* [ Symfony: The Translation Component] ( https://symfony.com/doc/current/components/translation.html )
375
400
* [ PoEdit] ( https://poedit.net/ ) Gettext Translations Editor
376
401
377
402
## Dependency injection
403
+
378
404
* [ What is Dependency Injection?] ( http://fabien.potencier.org/what-is-dependency-injection.html )
379
405
* [ The Clean Code Talks - Don't Look For Things!] ( https://www.youtube.com/watch?v=RlfLCWKxHJ0 ) (Video)
380
406
* [ Dependency Injection and Dependency Inversion] ( https://www.youtube.com/watch?v=Ojsn11XY0X8 ) (Video)
381
407
* [ PSR-11: Container interface] ( https://www.php-fig.org/psr/psr-11/ )
382
408
409
+ ## Regular Expresions
410
+
411
+ * todo
412
+
413
+ ## RESTful API
414
+
415
+ * todo
416
+
417
+ ## SOAP API
418
+
419
+ * todo
420
+
383
421
## Version control
384
422
* [ What is version control] ( https://www.atlassian.com/git/tutorials/what-is-version-control )
385
423
* ** [ Github] ( https://github.com ) **
@@ -389,6 +427,9 @@ Follow common PHP conventions for object-oriented code, and established industry
389
427
* [ How to contribute to an open source project on GitHub] ( http://blog.davidecoppola.com/2016/11/howto-contribute-to-open-source-project-on-github/ )
390
428
391
429
## Security
430
+
431
+ > A good programmer looks both ways before crossing a one-way street.
432
+
392
433
* [ Web security essentials] ( http://www.sohamkamani.com/blog/2017/01/16/web-security-essentials/ )
393
434
* [ PHP Security Cheat Sheet] ( https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet )
394
435
* [ PHP The Right Way - Security] ( http://www.phptherightway.com/#security )
@@ -397,6 +438,16 @@ Follow common PHP conventions for object-oriented code, and established industry
397
438
* [ What ENT_ * should I use for htmlspecialchars?] ( https://3v4l.org/PvRtm )
398
439
* [ The latest information about secure PHP software] ( https://paragonie.com/blog )
399
440
441
+ ## Architecture
442
+
443
+ * [ The Clean Architecture] ( https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html )
444
+ * [ Creating services you won’t hate] ( https://www.brandonsavage.net/creating-services-you-wont-hate/ )
445
+
446
+ ## Domain Driven Design (DDD)
447
+
448
+ * [ Domain-Driven Design: Tackling Complexity in the Heart of Software] ( https://www.amazon.de/gp/product/0321125215/ref=as_li_tl?ie=UTF8&tag=28031982-21&camp=1638&creative=6742&linkCode=as2&creativeASIN=0321125215&linkId=16ec2c3b5f11f8f3b4e152c4a25b22c3 )
449
+ * [ Implementing Domain-Driven Design] ( https://www.amazon.de/gp/product/0321834577/ref=as_li_tl?ie=UTF8&tag=28031982-21&camp=1638&creative=6742&linkCode=as2&creativeASIN=0321834577&linkId=eb63c6ebb30257011280bf1eab89f1db )
450
+
400
451
## Continuous integration (CI) and Continuous Delivery (CD)
401
452
* [ Continuous Delivery] ( https://www.amazon.de/gp/product/B003YMNVC0/ref=as_li_tl?ie=UTF8&camp=1638&creative=6742&creativeASIN=B003YMNVC0&linkCode=as2&tag=28031982-21 )
402
453
* [ Continuously delivering PHP projects] ( https://www.youtube.com/watch?v=HOwPJg-F4h0 )
0 commit comments