Contents


About …………………………………………………………………………………………………………………………………………………………….. 1
Chapter 1: Getting started with PHP ……………………………………………………………………………………………………. 2
Section 1.1: HTML output from web server …………………………………………………………………………………………………… 2
Section 1.2: Hello, World! …………………………………………………………………………………………………………………………….. 3
Section 1.3: Non-HTML output from web server ………………………………………………………………………………………….. 3
Section 1.4: PHP built-in server ……………………………………………………………………………………………………………………. 5
Section 1.5: PHP CLI ……………………………………………………………………………………………………………………………………. 5
Section 1.6: Instruction Separation ………………………………………………………………………………………………………………. 6
Section 1.7: PHP Tags …………………………………………………………………………………………………………………………………. 7
Chapter 2: Variables …………………………………………………………………………………………………………………………………. 9
Section 2.1: Accessing A Variable Dynamically By Name (Variable variables) ……………………………………………… 9
Section 2.2: Data Types ……………………………………………………………………………………………………………………………. 10
Section 2.3: Global variable best practices ………………………………………………………………………………………………… 13
Section 2.4: Default values of uninitialized variables …………………………………………………………………………………. 14
Section 2.5: Variable Value Truthiness and Identical Operator ………………………………………………………………….. 15
Chapter 3: Variable Scope ……………………………………………………………………………………………………………………. 18
Section 3.1: Superglobal variables …………………………………………………………………………………………………………….. 18
Section 3.2: Static properties and variables ………………………………………………………………………………………………. 18
Section 3.3: User-defined global variables ………………………………………………………………………………………………… 19
Chapter 4: Outputting the Value of a Variable ……………………………………………………………………………… 21
Section 4.1: echo and print ………………………………………………………………………………………………………………………… 21
Section 4.2: Outputting a structured view of arrays and objects ……………………………………………………………….. 22
Section 4.3: String concatenation with echo ………………………………………………………………………………………………. 24
Section 4.4: printf vs sprintf ………………………………………………………………………………………………………………………. 25
Section 4.5: Outputting large integers ………………………………………………………………………………………………………. 25
Section 4.6: Output a Multidimensional Array with index and value and print into the table ……………………….. 26
Chapter 5: Constants ……………………………………………………………………………………………………………………………… 28
Section 5.1: Defining constants …………………………………………………………………………………………………………………. 28
Section 5.2: Class Constants …………………………………………………………………………………………………………………….. 29
Section 5.3: Checking if constant is defined ………………………………………………………………………………………………. 29
Section 5.4: Using constants …………………………………………………………………………………………………………………….. 31
Section 5.5: Constant arrays …………………………………………………………………………………………………………………….. 31
Chapter 6: Comments …………………………………………………………………………………………………………………………….. 32
Section 6.1: Single Line Comments ……………………………………………………………………………………………………………. 32
Section 6.2: Multi Line Comments ……………………………………………………………………………………………………………… 32
Chapter 7: Types ……………………………………………………………………………………………………………………………………… 33
Section 7.1: Type Comparison …………………………………………………………………………………………………………………… 33
Section 7.2: Boolean …………………………………………………………………………………………………………………………………. 33
Section 7.3: Float ……………………………………………………………………………………………………………………………………… 34
Section 7.4: Strings …………………………………………………………………………………………………………………………………… 35
Section 7.5: Callable …………………………………………………………………………………………………………………………………. 37
Section 7.6: Resources ……………………………………………………………………………………………………………………………… 37
Section 7.7: Type Casting …………………………………………………………………………………………………………………………. 38
Section 7.8: Type Juggling ……………………………………………………………………………………………………………………….. 38
Section 7.9: Null ……………………………………………………………………………………………………………………………………….. 39
Section 7.10: Integers ………………………………………………………………………………………………………………………………… 39

Chapter 8: Operators …………………………………………………………………………………………………………………………….. 41
Section 8.1: Null Coalescing Operator (??) …………………………………………………………………………………………………. 41
Section 8.2: Spaceship Operator (<=>) ………………………………………………………………………………………………………. 42
Section 8.3: Execution Operator («) …………………………………………………………………………………………………………… 42
Section 8.4: Incrementing (++) and Decrementing Operators (–) ……………………………………………………………… 42
Section 8.5: Ternary Operator (?:) …………………………………………………………………………………………………………….. 43
Section 8.6: Logical Operators (&&/AND and ||/OR) …………………………………………………………………………………. 44
Section 8.7: String Operators (. and .=) ……………………………………………………………………………………………………… 44
Section 8.8: Object and Class Operators …………………………………………………………………………………………………… 44
Section 8.9: Combined Assignment (+= etc) ………………………………………………………………………………………………. 46
Section 8.10: Altering operator precedence (with parentheses) …………………………………………………………………. 46
Section 8.11: Basic Assignment (=) …………………………………………………………………………………………………………….. 47
Section 8.12: Association …………………………………………………………………………………………………………………………… 47
Section 8.13: Comparison Operators …………………………………………………………………………………………………………. 47
Section 8.14: Bitwise Operators …………………………………………………………………………………………………………………. 49
Section 8.15: instanceof (type operator) ……………………………………………………………………………………………………. 51
Chapter 9: References …………………………………………………………………………………………………………………………… 54
Section 9.1: Assign by Reference ………………………………………………………………………………………………………………. 54
Section 9.2: Return by Reference ……………………………………………………………………………………………………………… 54
Section 9.3: Pass by Reference …………………………………………………………………………………………………………………. 55
Chapter 10: Arrays …………………………………………………………………………………………………………………………………… 58
Section 10.1: Initializing an Array ……………………………………………………………………………………………………………….. 58
Section 10.2: Check if key exists ………………………………………………………………………………………………………………… 60
Section 10.3: Validating the array type ……………………………………………………………………………………………………… 61
Section 10.4: Creating an array of variables ……………………………………………………………………………………………… 61
Section 10.5: Checking if a value exists in array …………………………………………………………………………………………. 61
Section 10.6: ArrayAccess and Iterator Interfaces ……………………………………………………………………………………… 62
Chapter 11: Array iteration ……………………………………………………………………………………………………………………. 66
Section 11.1: Iterating multiple arrays together …………………………………………………………………………………………… 66
Section 11.2: Using an incremental index …………………………………………………………………………………………………… 67
Section 11.3: Using internal array pointers …………………………………………………………………………………………………. 67
Section 11.4: Using foreach ……………………………………………………………………………………………………………………….. 68
Section 11.5: Using ArrayObject Iterator …………………………………………………………………………………………………….. 70
Chapter 12: Executing Upon an Array ……………………………………………………………………………………………….. 71
Section 12.1: Applying a function to each element of an array …………………………………………………………………… 71
Section 12.2: Split array into chunks ………………………………………………………………………………………………………….. 72
Section 12.3: Imploding an array into string ………………………………………………………………………………………………. 73
Section 12.4: «Destructuring» arrays using list() …………………………………………………………………………………………. 73
Section 12.5: array_reduce ……………………………………………………………………………………………………………………….. 73
Section 12.6: Push a Value on an Array ……………………………………………………………………………………………………… 74
Chapter 13: Manipulating an Array …………………………………………………………………………………………………….. 76
Section 13.1: Filtering an array …………………………………………………………………………………………………………………… 76
Section 13.2: Removing elements from an array ……………………………………………………………………………………….. 77
Section 13.3: Sorting an Array …………………………………………………………………………………………………………………… 78
Section 13.4: Whitelist only some array keys ……………………………………………………………………………………………… 83
Section 13.5: Adding element to start of array …………………………………………………………………………………………… 83
Section 13.6: Exchange values with keys ……………………………………………………………………………………………………. 84
Section 13.7: Merge two arrays into one array …………………………………………………………………………………………… 84
Chapter 14: Processing Multiple Arrays Together …………………………………………………………………………. 86

Section 14.1: Array intersection ………………………………………………………………………………………………………………….. 86
Section 14.2: Merge or concatenate arrays ……………………………………………………………………………………………….. 86
Section 14.3: Changing a multidimensional array to associative array ………………………………………………………. 87
Section 14.4: Combining two arrays (keys from one, values from another) ……………………………………………….. 87
Chapter 15: Datetime Class ………………………………………………………………………………………………………………….. 89
Section 15.1: Create Immutable version of DateTime from Mutable prior PHP 5.6 ………………………………………. 89
Section 15.2: Add or Subtract Date Intervals ……………………………………………………………………………………………… 89
Section 15.3: getTimestamp ………………………………………………………………………………………………………………………. 89
Section 15.4: setDate ………………………………………………………………………………………………………………………………… 90
Section 15.5: Create DateTime from custom format ………………………………………………………………………………….. 90
Section 15.6: Printing DateTimes ……………………………………………………………………………………………………………….. 90
Chapter 16: Working with Dates and Time ………………………………………………………………………………………. 92
Section 16.1: Getting the dierence between two dates / times ………………………………………………………………….. 92
Section 16.2: Convert a date into another format ………………………………………………………………………………………. 92
Section 16.3: Parse English date descriptions into a Date format ……………………………………………………………….. 94
Section 16.4: Using Predefined Constants for Date Format ………………………………………………………………………… 94
Chapter 17: Loops ……………………………………………………………………………………………………………………………………. 96
Section 17.1: continue ………………………………………………………………………………………………………………………………… 96
Section 17.2: break ……………………………………………………………………………………………………………………………………. 97
Section 17.3: foreach ………………………………………………………………………………………………………………………………… 98
Section 17.4: do…while ……………………………………………………………………………………………………………………………….. 98
Section 17.5: for ………………………………………………………………………………………………………………………………………… 99
Section 17.6: while …………………………………………………………………………………………………………………………………… 100
Chapter 18: Functions …………………………………………………………………………………………………………………………… 101
Section 18.1: Variable-length argument lists …………………………………………………………………………………………….. 101
Section 18.2: Optional Parameters ………………………………………………………………………………………………………….. 102
Section 18.3: Passing Arguments by Reference ……………………………………………………………………………………….. 103
Section 18.4: Basic Function Usage …………………………………………………………………………………………………………. 104
Section 18.5: Function Scope …………………………………………………………………………………………………………………… 104
Chapter 19: Functional Programming ……………………………………………………………………………………………… 105
Section 19.1: Closures ………………………………………………………………………………………………………………………………. 105
Section 19.2: Assignment to variables ……………………………………………………………………………………………………… 106
Section 19.3: Objects as a function ………………………………………………………………………………………………………….. 106
Section 19.4: Using outside variables ………………………………………………………………………………………………………. 107
Section 19.5: Anonymous function …………………………………………………………………………………………………………… 107
Section 19.6: Pure functions …………………………………………………………………………………………………………………….. 108
Section 19.7: Common functional methods in PHP …………………………………………………………………………………… 108
Section 19.8: Using built-in functions as callbacks ……………………………………………………………………………………. 109
Section 19.9: Scope …………………………………………………………………………………………………………………………………. 109
Section 19.10: Passing a callback function as a parameter ………………………………………………………………………. 109
Chapter 20: Control Structures …………………………………………………………………………………………………………. 111
Section 20.1: if else …………………………………………………………………………………………………………………………………. 111
Section 20.2: Alternative syntax for control structures …………………………………………………………………………….. 111
Section 20.3: while ………………………………………………………………………………………………………………………………….. 111
Section 20.4: do-while …………………………………………………………………………………………………………………………….. 112
Section 20.5: goto ………………………………………………………………………………………………………………………………….. 112
Section 20.6: declare ………………………………………………………………………………………………………………………………. 112
Section 20.7: include & require ……………………………………………………………………………………………………………….. 113
Section 20.8: return ………………………………………………………………………………………………………………………………… 114
Section 20.9: for …………………………………………………………………………………………………………………………………….. 114

Section 20.10: foreach …………………………………………………………………………………………………………………………….. 115
Section 20.11: if elseif else ……………………………………………………………………………………………………………………….. 115
Section 20.12: if ………………………………………………………………………………………………………………………………………. 116
Section 20.13: switch ……………………………………………………………………………………………………………………………….. 116
Chapter 21: Alternative Syntax for Control Structures ………………………………………………………………. 118
Section 21.1: Alternative if/else statement ……………………………………………………………………………………………….. 118
Section 21.2: Alternative for statement ……………………………………………………………………………………………………. 118
Section 21.3: Alternative while statement ………………………………………………………………………………………………… 118
Section 21.4: Alternative foreach statement …………………………………………………………………………………………….. 118
Section 21.5: Alternative switch statement ………………………………………………………………………………………………. 119
Chapter 22: String Parsing ………………………………………………………………………………………………………………….. 120
Section 22.1: Splitting a string by separators …………………………………………………………………………………………… 120
Section 22.2: Substring …………………………………………………………………………………………………………………………… 120
Section 22.3: Searching a substring with strpos ………………………………………………………………………………………. 122
Section 22.4: Parsing string using regular expressions …………………………………………………………………………….. 123
Chapter 23: String formatting …………………………………………………………………………………………………………… 124
Section 23.1: String interpolation …………………………………………………………………………………………………………….. 124
Section 23.2: Extracting/replacing substrings …………………………………………………………………………………………. 125
Chapter 24: Exception Handling and Error Reporting ……………………………………………………………….. 127
Section 24.1: Setting error reporting and where to display them ……………………………………………………………… 127
Section 24.2: Logging fatal errors …………………………………………………………………………………………………………… 127
Chapter 25: Sending Email ………………………………………………………………………………………………………………….. 129
Section 25.1: Sending Email – The basics, more details, and a full example ………………………………………………. 129
Section 25.2: Sending HTML Email Using mail() ………………………………………………………………………………………. 131
Section 25.3: Sending Email With An Attachment Using mail() …………………………………………………………………. 132
Section 25.4: Sending Plain Text Email Using PHPMailer ………………………………………………………………………….. 133
Section 25.5: Sending HTML Email Using PHPMailer ……………………………………………………………………………….. 134
Section 25.6: Sending Email With An Attachment Using PHPMailer ………………………………………………………….. 135
Section 25.7: Sending Plain Text Email Using Sendgrid ……………………………………………………………………………. 135
Section 25.8: Sending Email With An Attachment Using Sendgrid ……………………………………………………………. 136
Chapter 26: Sessions …………………………………………………………………………………………………………………………….. 137
Section 26.1: session_start() Options ………………………………………………………………………………………………………. 137
Section 26.2: Session Locking …………………………………………………………………………………………………………………. 137
Section 26.3: Manipulating session data ………………………………………………………………………………………………….. 138
Section 26.4: Destroy an entire session …………………………………………………………………………………………………… 138
Section 26.5: Safe Session Start With no Errors ……………………………………………………………………………………….. 139
Section 26.6: Session name …………………………………………………………………………………………………………………….. 139
Chapter 27: Cookies ……………………………………………………………………………………………………………………………… 141
Section 27.1: Modifying a Cookie …………………………………………………………………………………………………………….. 141
Section 27.2: Setting a Cookie ………………………………………………………………………………………………………………… 141
Section 27.3: Checking if a Cookie is Set ………………………………………………………………………………………………….. 142
Section 27.4: Removing a Cookie ……………………………………………………………………………………………………………. 142
Section 27.5: Retrieving a Cookie ……………………………………………………………………………………………………………. 142
Chapter 28: Classes and Objects ………………………………………………………………………………………………………. 143
Section 28.1: Class Constants ………………………………………………………………………………………………………………….. 143
Section 28.2: Abstract Classes ………………………………………………………………………………………………………………… 145
Section 28.3: Late static binding ……………………………………………………………………………………………………………… 147
Section 28.4: Namespacing and Autoloading ………………………………………………………………………………………….. 148
Section 28.5: Method and Property Visibility ……………………………………………………………………………………………. 150

Section 28.6: Interfaces ………………………………………………………………………………………………………………………….. 152
Section 28.7: Final Keyword ……………………………………………………………………………………………………………………. 155
Section 28.8: Autoloading ……………………………………………………………………………………………………………………….. 156
Section 28.9: Calling a parent constructor when instantiating a child ………………………………………………………. 157
Section 28.10: Dynamic Binding ………………………………………………………………………………………………………………. 158
Section 28.11: $this, self and static plus the singleton ……………………………………………………………………………….. 159
Section 28.12: Defining a Basic Class ………………………………………………………………………………………………………. 162
Section 28.13: Anonymous Classes ………………………………………………………………………………………………………….. 163
Chapter 29: Namespaces …………………………………………………………………………………………………………………….. 165
Section 29.1: Declaring namespaces ……………………………………………………………………………………………………….. 165
Section 29.2: Referencing a class or function in a namespace ………………………………………………………………… 165
Section 29.3: Declaring sub-namespaces ……………………………………………………………………………………………….. 166
Section 29.4: What are Namespaces? …………………………………………………………………………………………………….. 167
Chapter 30: Output Buering ……………………………………………………………………………………………………………. 168
Section 30.1: Basic usage getting content between buers and clearing …………………………………………………. 168
Section 30.2: Processing the buer via a callback …………………………………………………………………………………… 168
Section 30.3: Nested output buers ………………………………………………………………………………………………………… 169
Section 30.4: Running output buer before any content …………………………………………………………………………. 170
Section 30.5: Stream output to client ………………………………………………………………………………………………………. 171
Section 30.6: Using Output buer to store contents in a file, useful for reports, invoices etc …………………….. 171
Section 30.7: Typical usage and reasons for using ob_start ……………………………………………………………………. 171
Section 30.8: Capturing the output buer to re-use later ………………………………………………………………………… 172
Chapter 31: Superglobal Variables PHP ………………………………………………………………………………………….. 174
Section 31.1: Suberglobals explained ……………………………………………………………………………………………………….. 174
Section 31.2: PHP5 SuperGlobals …………………………………………………………………………………………………………….. 181
Chapter 32: JSON …………………………………………………………………………………………………………………………………… 185
Section 32.1: Decoding a JSON string ……………………………………………………………………………………………………… 185
Section 32.2: Encoding a JSON string ……………………………………………………………………………………………………… 188
Section 32.3: Debugging JSON errors …………………………………………………………………………………………………….. 191
Section 32.4: Using JsonSerializable in an Object ……………………………………………………………………………………. 192
Section 32.5: Header json and the returned response ……………………………………………………………………………… 193
Chapter 33: SOAP Client ………………………………………………………………………………………………………………………. 195
Section 33.1: WSDL Mode ………………………………………………………………………………………………………………………… 195
Section 33.2: Non-WSDL Mode ……………………………………………………………………………………………………………….. 195
Section 33.3: Classmaps …………………………………………………………………………………………………………………………. 195
Section 33.4: Tracing SOAP request and response ………………………………………………………………………………….. 196
Chapter 34: Using cURL in PHP …………………………………………………………………………………………………………. 198
Section 34.1: Basic Usage (GET Requests) ………………………………………………………………………………………………. 198
Section 34.2: POST Requests ………………………………………………………………………………………………………………….. 198
Section 34.3: Using Cookies …………………………………………………………………………………………………………………….. 199
Section 34.4: Using multi_curl to make multiple POST requests ………………………………………………………………. 200
Section 34.5: Sending multi-dimensional data and multiple files with CurlFile in one request ……………………. 201
Section 34.6: Creating and sending a request with a custom method ………………………………………………………. 204
Section 34.7: Get and Set custom http headers in php …………………………………………………………………………….. 204
Chapter 35: Reflection …………………………………………………………………………………………………………………………. 206
Section 35.1: Feature detection of classes or objects ……………………………………………………………………………….. 206
Section 35.2: Testing private/protected methods ……………………………………………………………………………………. 206
Section 35.3: Accessing private and protected member variables …………………………………………………………… 208
Chapter 36: Dependency Injection ……………………………………………………………………………………………………. 210

Section 36.1: Constructor Injection …………………………………………………………………………………………………………… 210
Section 36.2: Setter Injection …………………………………………………………………………………………………………………… 210
Section 36.3: Container Injection ……………………………………………………………………………………………………………… 212
Chapter 37: XML …………………………………………………………………………………………………………………………………….. 213
Section 37.1: Create a XML using DomDocument …………………………………………………………………………………….. 213
Section 37.2: Read a XML document with DOMDocument ……………………………………………………………………….. 214
Section 37.3: Leveraging XML with PHP’s SimpleXML Library …………………………………………………………………… 215
Section 37.4: Create an XML file using XMLWriter ……………………………………………………………………………………. 217
Section 37.5: Read a XML document with SimpleXML ……………………………………………………………………………… 218
Chapter 38: Parsing HTML ………………………………………………………………………………………………………………….. 220
Section 38.1: Parsing HTML from a string ………………………………………………………………………………………………… 220
Section 38.2: Using XPath ……………………………………………………………………………………………………………………….. 220
Section 38.3: SimpleXML …………………………………………………………………………………………………………………………. 220
Chapter 39: SimpleXML ………………………………………………………………………………………………………………………… 222
Section 39.1: Loading XML data into simplexml ……………………………………………………………………………………….. 222
Chapter 40: Regular Expressions (regexp/PCRE) ……………………………………………………………………….. 223
Section 40.1: Global RegExp match …………………………………………………………………………………………………………. 223
Section 40.2: String matching with regular expressions …………………………………………………………………………… 224
Section 40.3: Split string into array by a regular expression …………………………………………………………………….. 225
Section 40.4: String replacing with regular expression …………………………………………………………………………….. 225
Section 40.5: String replace with callback ……………………………………………………………………………………………….. 225
Chapter 41: Traits ………………………………………………………………………………………………………………………………….. 227
Section 41.1: What is a Trait? …………………………………………………………………………………………………………………… 227
Section 41.2: Traits to facilitate horizontal code reuse ……………………………………………………………………………… 228
Section 41.3: Conflict Resolution ……………………………………………………………………………………………………………… 229
Section 41.4: Implementing a Singleton using Traits ………………………………………………………………………………… 230
Section 41.5: Traits to keep classes clean ………………………………………………………………………………………………… 231
Section 41.6: Multiple Traits Usage ………………………………………………………………………………………………………….. 232
Section 41.7: Changing Method Visibility ………………………………………………………………………………………………….. 232
Chapter 42: Composer Dependency Manager ……………………………………………………………………………… 234
Section 42.1: What is Composer? …………………………………………………………………………………………………………….. 234
Section 42.2: Autoloading with Composer ……………………………………………………………………………………………….. 235
Section 42.3: Dierence between ‘composer install’ and ‘composer update’ ……………………………………………. 235
Section 42.4: Composer Available Commands ………………………………………………………………………………………… 236
Section 42.5: Benefits of Using Composer ………………………………………………………………………………………………. 237
Section 42.6: Installation …………………………………………………………………………………………………………………………. 238
Chapter 43: Magic Methods ……………………………………………………………………………………………………………….. 239
Section 43.1: __call() and __callStatic() ………………………………………………………………………………………………….. 239
Section 43.2: __get(), __set(), __isset() and __unset() ………………………………………………………………………….. 240
Section 43.3: __construct() and __destruct() …………………………………………………………………………………………. 241
Section 43.4: __toString() ………………………………………………………………………………………………………………………. 242
Section 43.5: __clone() …………………………………………………………………………………………………………………………… 243
Section 43.6: __invoke() …………………………………………………………………………………………………………………………. 243
Section 43.7: __sleep() and __wakeup() ………………………………………………………………………………………………… 244
Section 43.8: __debugInfo() …………………………………………………………………………………………………………………… 244
Chapter 44: File handling …………………………………………………………………………………………………………………… 246
Section 44.1: Convenience functions ……………………………………………………………………………………………………….. 246
Section 44.2: Deleting files and directories ……………………………………………………………………………………………… 248
Section 44.3: Getting file information ………………………………………………………………………………………………………. 248

Section 44.4: Stream-based file IO ………………………………………………………………………………………………………….. 250
Section 44.5: Moving and Copying files and directories …………………………………………………………………………… 252
Section 44.6: Minimize memory usage when dealing with large files ……………………………………………………….. 253
Chapter 45: Magic Constants …………………………………………………………………………………………………………….. 254
Section 45.1: Dierence between __FUNCTION__ and __METHOD__ …………………………………………………… 254
Section 45.2: Dierence between __CLASS__, get_class() and get_called_class() ………………………………… 254
Section 45.3: File & Directory Constants ………………………………………………………………………………………………….. 255
Chapter 46: Type hinting …………………………………………………………………………………………………………………….. 256
Section 46.1: Type hinting classes and interfaces …………………………………………………………………………………….. 256
Section 46.2: Type hinting scalar types, arrays and callables ………………………………………………………………….. 257
Section 46.3: Nullable type hints ……………………………………………………………………………………………………………… 258
Section 46.4: Type hinting generic objects ………………………………………………………………………………………………. 259
Section 46.5: Type Hinting No Return(Void) ……………………………………………………………………………………………. 260
Chapter 47: Autoloading Primer ………………………………………………………………………………………………………. 261
Section 47.1: Autoloading as part of a framework solution ………………………………………………………………………. 261
Section 47.2: Inline class definition, no loading required ………………………………………………………………………….. 261
Section 47.3: Manual class loading with require ………………………………………………………………………………………. 262
Section 47.4: Autoloading replaces manual class definition loading ………………………………………………………… 262
Section 47.5: Autoloading with Composer ……………………………………………………………………………………………….. 263
Chapter 48: Multi Threading Extension ………………………………………………………………………………………….. 264
Section 48.1: Getting Started …………………………………………………………………………………………………………………… 264
Section 48.2: Using Pools and Workers …………………………………………………………………………………………………… 264
Chapter 49: Filters & Filter Functions ……………………………………………………………………………………………… 266
Section 49.1: Validating Boolean Values ………………………………………………………………………………………………….. 266
Section 49.2: Validating A Number Is A Float ………………………………………………………………………………………….. 266
Section 49.3: Validate A MAC Address …………………………………………………………………………………………………….. 267
Section 49.4: Sanitze Email Addresses …………………………………………………………………………………………………….. 267
Section 49.5: Sanitize Integers ………………………………………………………………………………………………………………… 268
Section 49.6: Sanitize URLs …………………………………………………………………………………………………………………….. 268
Section 49.7: Validate Email Address ………………………………………………………………………………………………………. 269
Section 49.8: Validating A Value Is An Integer …………………………………………………………………………………………. 269
Section 49.9: Validating An Integer Falls In A Range ……………………………………………………………………………….. 270
Section 49.10: Validate a URL …………………………………………………………………………………………………………………. 270
Section 49.11: Sanitize Floats …………………………………………………………………………………………………………………… 272
Section 49.12: Validate IP Addresses ……………………………………………………………………………………………………….. 274
Section 49.13: Sanitize filters ……………………………………………………………………………………………………………………. 275
Chapter 50: Generators ………………………………………………………………………………………………………………………. 276
Section 50.1: The Yield Keyword ……………………………………………………………………………………………………………… 276
Section 50.2: Reading a large file with a generator …………………………………………………………………………………. 277
Section 50.3: Why use a generator? ……………………………………………………………………………………………………….. 277
Section 50.4: Using the send()-function to pass values to a generator …………………………………………………….. 278
Chapter 51: UTF-8 ………………………………………………………………………………………………………………………………….. 280
Section 51.1: Input ……………………………………………………………………………………………………………………………………. 280
Section 51.2: Output ……………………………………………………………………………………………………………………………….. 280
Section 51.3: Data Storage and Access ……………………………………………………………………………………………………. 280
Chapter 52: URLs …………………………………………………………………………………………………………………………………… 282
Section 52.1: Parsing a URL …………………………………………………………………………………………………………………….. 282
Section 52.2: Build an URL-encoded query string from an array …………………………………………………………….. 282
Section 52.3: Redirecting to another URL ………………………………………………………………………………………………… 283

Chapter 53: Object Serialization ……………………………………………………………………………………………………….. 285
Section 53.1: Serialize / Unserialize ………………………………………………………………………………………………………….. 285
Section 53.2: The Serializable interface …………………………………………………………………………………………………… 285
Chapter 54: PHPDoc …………………………………………………………………………………………………………………………….. 287
Section 54.1: Describing a variable ………………………………………………………………………………………………………….. 287
Section 54.2: Adding metadata to functions ……………………………………………………………………………………………. 287
Section 54.3: Describing parameters ………………………………………………………………………………………………………. 288
Section 54.4: Collections …………………………………………………………………………………………………………………………. 289
Section 54.5: Adding metadata to files ……………………………………………………………………………………………………. 290
Section 54.6: Inheriting metadata from parent structures ……………………………………………………………………….. 290
Chapter 55: Serialization …………………………………………………………………………………………………………………….. 292
Section 55.1: Serialization of dierent types …………………………………………………………………………………………….. 292
Section 55.2: Security Issues with unserialize …………………………………………………………………………………………… 293
Chapter 56: Closure ………………………………………………………………………………………………………………………………. 296
Section 56.1: Basic usage of a closure …………………………………………………………………………………………………….. 296
Section 56.2: Using external variables …………………………………………………………………………………………………….. 296
Section 56.3: Basic closure binding …………………………………………………………………………………………………………. 297
Section 56.4: Closure binding and scope …………………………………………………………………………………………………. 297
Section 56.5: Binding a closure for one call …………………………………………………………………………………………….. 299
Section 56.6: Use closures to implement observer pattern ………………………………………………………………………. 299
Chapter 57: Reading Request Data …………………………………………………………………………………………………. 302
Section 57.1: Reading raw POST data ……………………………………………………………………………………………………… 302
Section 57.2: Reading POST data ……………………………………………………………………………………………………………. 302
Section 57.3: Reading GET data ……………………………………………………………………………………………………………… 302
Section 57.4: Handling file upload errors …………………………………………………………………………………………………. 303
Section 57.5: Passing arrays by POST …………………………………………………………………………………………………….. 303
Section 57.6: Uploading files with HTTP PUT …………………………………………………………………………………………… 305
Chapter 58: Type juggling and Non-Strict Comparison Issues ………………………………………………… 306
Section 58.1: What is Type Juggling? ………………………………………………………………………………………………………. 306
Section 58.2: Reading from a file ……………………………………………………………………………………………………………. 306
Section 58.3: Switch surprises …………………………………………………………………………………………………………………. 307
Section 58.4: Strict typing ……………………………………………………………………………………………………………………….. 308
Chapter 59: Sockets ……………………………………………………………………………………………………………………………… 310
Section 59.1: TCP client socket ………………………………………………………………………………………………………………… 310
Section 59.2: TCP server socket ……………………………………………………………………………………………………………… 311
Section 59.3: UDP server socket ……………………………………………………………………………………………………………… 311
Section 59.4: Handling socket errors ………………………………………………………………………………………………………. 312
Chapter 60: PDO …………………………………………………………………………………………………………………………………….. 313
Section 60.1: Preventing SQL injection with Parameterized Queries …………………………………………………………. 313
Section 60.2: Basic PDO Connection and Retrieval ………………………………………………………………………………….. 314
Section 60.3: Database Transactions with PDO ……………………………………………………………………………………….. 315
Section 60.4: PDO: connecting to MySQL/MariaDB server ………………………………………………………………………. 317
Section 60.5: PDO: Get number of aected rows by a query …………………………………………………………………… 318
Section 60.6: PDO::lastInsertId() ………………………………………………………………………………………………………………. 318
Chapter 61: PHP MySQLi ………………………………………………………………………………………………………………………. 320
Section 61.1: Close connection …………………………………………………………………………………………………………………. 320
Section 61.2: MySQLi connect ………………………………………………………………………………………………………………….. 320
Section 61.3: Loop through MySQLi results ………………………………………………………………………………………………. 321
Section 61.4: Prepared statements in MySQLi ………………………………………………………………………………………….. 321

Section 61.5: Escaping Strings …………………………………………………………………………………………………………………. 322
Section 61.6: Debugging SQL in MySQLi ………………………………………………………………………………………………….. 323
Section 61.7: MySQLi query ……………………………………………………………………………………………………………………… 323
Section 61.8: How to get data from a prepared statement ………………………………………………………………………. 324
Section 61.9: MySQLi Insert ID …………………………………………………………………………………………………………………. 326
Chapter 62: SQLite3 ………………………………………………………………………………………………………………………………. 328
Section 62.1: SQLite3 Quickstart Tutorial …………………………………………………………………………………………………. 328
Section 62.2: Querying a database …………………………………………………………………………………………………………. 329
Section 62.3: Retrieving only one result …………………………………………………………………………………………………… 330
Chapter 63: Using SQLSRV ………………………………………………………………………………………………………………….. 331
Section 63.1: Retrieving Error Messages ………………………………………………………………………………………………….. 331
Section 63.2: Fetching Query Results ………………………………………………………………………………………………………. 331
Section 63.3: Creating a Connection ……………………………………………………………………………………………………….. 332
Section 63.4: Making a Simple Query ………………………………………………………………………………………………………. 332
Section 63.5: Invoking a Stored Procedure ………………………………………………………………………………………………. 332
Section 63.6: Making a Parameterised Query ………………………………………………………………………………………….. 333
Chapter 64: Command Line Interface (CLI) …………………………………………………………………………………… 334
Section 64.1: Handling Program Options …………………………………………………………………………………………………. 334
Section 64.2: Argument Handling ……………………………………………………………………………………………………………. 335
Section 64.3: Input and Output Handling …………………………………………………………………………………………………. 336
Section 64.4: Return Codes …………………………………………………………………………………………………………………….. 337
Section 64.5: Restrict script execution to command line ………………………………………………………………………….. 337
Section 64.6: Behavioural dierences on the command line ……………………………………………………………………. 337
Section 64.7: Running your script ……………………………………………………………………………………………………………. 338
Section 64.8: Edge Cases of getopt() ………………………………………………………………………………………………………. 338
Section 64.9: Running built-in web server ………………………………………………………………………………………………… 339
Chapter 65: Localization ……………………………………………………………………………………………………………………… 341
Section 65.1: Localizing strings with gettext() …………………………………………………………………………………………… 341
Chapter 66: Debugging ………………………………………………………………………………………………………………………… 342
Section 66.1: Dumping variables ……………………………………………………………………………………………………………… 342
Section 66.2: Displaying errors ……………………………………………………………………………………………………………….. 342
Section 66.3: phpinfo() ……………………………………………………………………………………………………………………………. 343
Section 66.4: Xdebug ……………………………………………………………………………………………………………………………… 343
Section 66.5: Error Reporting (use them both) ………………………………………………………………………………………… 344
Section 66.6: phpversion() ………………………………………………………………………………………………………………………. 344
Chapter 67: Unit Testing ……………………………………………………………………………………………………………………… 345
Section 67.1: Testing class rules ………………………………………………………………………………………………………………. 345
Section 67.2: PHPUnit Data Providers ……………………………………………………………………………………………………… 348
Section 67.3: Test exceptions ………………………………………………………………………………………………………………….. 351
Chapter 68: Compilation of Errors and Warnings ……………………………………………………………………….. 353
Section 68.1: Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM ………………………………….. 353
Section 68.2: Notice: Undefined index ……………………………………………………………………………………………………… 353
Section 68.3: Warning: Cannot modify header information – headers already sent ………………………………….. 353
Chapter 69: Headers Manipulation …………………………………………………………………………………………………… 355
Section 69.1: Basic Setting of a Header …………………………………………………………………………………………………… 355
Chapter 70: Contributing to the PHP Core …………………………………………………………………………………….. 356
Section 70.1: Setting up a basic development environment ……………………………………………………………………… 356
Chapter 71: Coding Conventions ……………………………………………………………………………………………………….. 357
Section 71.1: PHP Tags ……………………………………………………………………………………………………………………………..

Categories:

Tags:

Comments are closed

Publicidad
× ¿Cómo puedo ayudarte?