Cool syntaxes when you work with PHP
- Tram Ho
Here, I’m just talking in general through each version, not specifically, if you can’t use them, then check it out in which version can be used.
1. Starting from PHP7
Since the launch of PHP7, the speed in PHP 7 has improved amazingly as it is at least 2 times faster than PHP 5, if you know the optimization it is even faster, maybe up to 3-4 times
1. Declare the type of the variable and return type
In php5, we only have 2 type-hints that are class
and array
. As for PHP7 we have more styles like : integer
, float
, string
, bool
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <span class="token keyword">class</span> <span class="token class-name-definition class-name">Animal</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">__construct</span><span class="token punctuation">(</span> <span class="token keyword type-hint">string</span> <span class="token variable">$name</span><span class="token punctuation">,</span> <span class="token class-name type-declaration">integer</span> <span class="token variable">$age</span><span class="token punctuation">,</span> <span class="token keyword type-hint">float</span> <span class="token variable">$weight</span><span class="token punctuation">,</span> <span class="token keyword type-hint">bool</span> <span class="token variable">$isForeign</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// </span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">:</span> <span class="token keyword return-type">string</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$this</span><span class="token operator">-></span><span class="token property">name</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
As you have seen, we can declare the types of variables and can specify the return type of the function.
In PHP7.4 it is even more supported:
1 2 3 4 | <span class="token keyword type-declaration">bool</span><span class="token punctuation">,</span> <span class="token keyword type-declaration">int</span><span class="token punctuation">,</span> <span class="token keyword type-declaration">float</span><span class="token punctuation">,</span> <span class="token keyword type-declaration">string</span><span class="token punctuation">,</span> <span class="token keyword type-declaration">array</span><span class="token punctuation">,</span> <span class="token keyword type-declaration">object</span><span class="token punctuation">,</span> <span class="token keyword type-declaration">iterable</span><span class="token punctuation">,</span> <span class="token keyword">self</span><span class="token punctuation">,</span> <span class="token keyword">parent</span> any <span class="token keyword">class</span> <span class="token class-name-definition class-name">or</span> <span class="token keyword">interface</span> <span class="token class-name-definition class-name">name</span> <span class="token operator">?</span>type <span class="token comment">// kiểu dữ liệu trả về có thể là bất kỳ kiểu nào kể trên</span> |
2. New operator
- Spaceship Operator:
< = >
1 2 3 4 5 6 7 8 9 10 11 | <span class="token variable">$a</span> <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span> <span class="token variable">$b</span> <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span> <span class="token variable">$compare</span> <span class="token operator">=</span> <span class="token variable">$a</span> <span class="token operator"><=></span> <span class="token variable">$b</span><span class="token punctuation">;</span> <span class="token comment">/** return -1 nếu $a < $b return 0 nếu $a = $b return 1 nếu $a > $b */</span> |
- Null Coalesce Operator :
??
. It is used to replace the ternary operation associated with the Isset() function.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <span class="token comment">// thay vì</span> <span class="token variable">$a</span> <span class="token operator">=</span> <span class="token keyword">isset</span><span class="token punctuation">(</span><span class="token variable">$a</span><span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token variable">$a</span> <span class="token punctuation">:</span> <span class="token constant">null</span><span class="token punctuation">;</span> <span class="token comment">// thì bạn sẽ làm như này </span> <span class="token variable">$a</span> <span class="token operator">=</span> <span class="token variable">$a</span> <span class="token operator">??</span> <span class="token constant">null</span><span class="token punctuation">;</span> <span class="token comment">// hoặc </span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$name</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token variable">$name</span> <span class="token operator">=</span> <span class="token variable">$name</span><span class="token punctuation">;</span> <span class="token keyword">else</span> <span class="token variable">$name</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'Guest'</span><span class="token punctuation">;</span> <span class="token variable">$name</span> <span class="token operator">=</span> <span class="token variable">$name</span> <span class="token operator">??</span> <span class="token string single-quoted-string">'Guest'</span><span class="token punctuation">;</span> <span class="token comment">// bạn cũng có thể check nhiều lần</span> <span class="token variable">$a</span> <span class="token operator">=</span> <span class="token variable">$a</span> <span class="token operator">??</span> <span class="token variable">$b</span> <span class="token operator">??</span> <span class="token variable">$c</span> <span class="token operator">??</span> <span class="token variable">$d</span> <span class="token operator">??</span> <span class="token number">0</span><span class="token punctuation">;</span> |
3. Anonymous class
We have an Anonymous function like this:
1 2 3 4 5 6 | <span class="token variable">$func</span> <span class="token operator">=</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$a</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token variable">$func</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
In PHP7, we also have an Anonymous class:
1 2 3 4 5 6 7 8 9 | <span class="token variable">$animal</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">class</span> <span class="token punctuation">{</span> <span class="token keyword">function</span> <span class="token function-definition function">demo</span><span class="token punctuation">(</span><span class="token variable">$name</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Đây là con <span class="token interpolation"><span class="token variable">$name</span></span> của mình"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token variable">$animal</span><span class="token operator">-></span><span class="token function">demo</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Bẹc rê Đức'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
Self invoking function (IIFE) ?
Sounds familiar, like in js
1 2 3 4 | <span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// trong js ta sẽ viết như này =))</span> <span class="token punctuation">}</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> |
And it looks like we do the same in PHP :v
1 2 3 4 | <span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// echo 1;</span> <span class="token punctuation">}</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> |
More and more PHP code looks like js code, isn’t it?
4. Arrow function
In PHP7.4 you can write more concise function with arrow function, it’s like js :v
1 2 3 4 5 6 7 | <span class="token comment">// ví dụ </span> <span class="token variable">$a</span> <span class="token operator">=</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// thì bạn có thể viết thế này</span> <span class="token variable">$a</span> <span class="token operator">=</span> <span class="token keyword">fn</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token number">1</span><span class="token punctuation">;</span> |
More examples combining arrow function :
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token comment">// dùng với array_map</span> <span class="token variable">$validated</span><span class="token punctuation">[</span><span class="token variable">$field</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">array_map</span><span class="token punctuation">(</span><span class="token keyword">fn</span><span class="token punctuation">(</span><span class="token variable">$item</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token keyword type-casting">int</span><span class="token punctuation">)</span><span class="token variable">$item</span><span class="token punctuation">,</span> <span class="token variable">$validated</span><span class="token punctuation">[</span><span class="token variable">$field</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// dùng để load relation</span> <span class="token variable">$object</span><span class="token operator">-></span><span class="token function">load</span><span class="token punctuation">(</span><span class="token punctuation">[</span> <span class="token string single-quoted-string">'posts'</span> <span class="token operator">=></span> <span class="token keyword">fn</span><span class="token punctuation">(</span><span class="token variable">$q</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token variable">$q</span><span class="token operator">-></span><span class="token function">select</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'id'</span><span class="token punctuation">,</span> <span class="token operator">...</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'author'</span> <span class="token operator">=></span> <span class="token keyword">fn</span><span class="token punctuation">(</span><span class="token variable">$q</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token variable">$q</span><span class="token operator">-></span><span class="token function">select</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'id'</span><span class="token punctuation">,</span> <span class="token operator">...</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">with</span><span class="token punctuation">(</span><span class="token punctuation">[</span> <span class="token string single-quoted-string">'profile'</span> <span class="token operator">=></span> <span class="token keyword">fn</span><span class="token punctuation">(</span><span class="token variable">$q</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token variable">$q</span><span class="token operator">-></span><span class="token function">select</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'id'</span><span class="token punctuation">,</span> <span class="token operator">...</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// dùng với query</span> <span class="token variable">$builder</span><span class="token operator">-></span><span class="token function">when</span><span class="token punctuation">(</span><span class="token constant boolean">true</span><span class="token punctuation">,</span> <span class="token keyword">fn</span><span class="token punctuation">(</span><span class="token variable">$sq1</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token variable">$q</span><span class="token operator">-></span><span class="token function">where</span><span class="token punctuation">(</span><span class="token operator">...</span><span class="token operator">.</span><span class="token punctuation">)</span><span class="token punctuation">}</span> |
5. Spread Operator trong Array Expressions
You must have seen people using threedots (...
) in js already? yes, php can do it too :v
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <span class="token comment">// tha hồ cho ta nhiều cách sáng tạo để dùng với nó </span> <span class="token variable">$arr1</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string single-quoted-string">'3'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'4'</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$arr2</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string single-quoted-string">'1'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'2'</span><span class="token punctuation">,</span> <span class="token operator">...</span><span class="token variable">$arr1</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'5'</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// ['1', '2', '3', '4', '5'];</span> <span class="token function">now</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">setTime</span><span class="token punctuation">(</span><span class="token operator">...</span><span class="token function">explode</span><span class="token punctuation">(</span><span class="token string single-quoted-string">':'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'12:00'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// => Illuminate\Support\Carbon @1633521600 {#4717</span> <span class="token comment">// date: 2021-10-06 12:00:00.0 UTC (+00:00),</span> <span class="token comment">// }</span> <span class="token variable">$arrayMerged</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token operator">...</span><span class="token variable">$arr1</span><span class="token punctuation">,</span> <span class="token operator">...</span><span class="token variable">$arr2</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$arrayMerged</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token operator">...</span><span class="token variable">$arr1</span><span class="token punctuation">,</span> <span class="token operator">...</span><span class="token punctuation">(</span><span class="token keyword">fn</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">;</span> |
Too cool, isn’t it?
At a glance, PHP 7 we will have the above called new, and most commonly used.
2. What’s new in PHP8?
PHP8 is a new update, it contains more optimization features and also increases processing speed slightly. Let’s take a look at some cool things on php8.
1. Named arguments
In PHP7, when setting a function with many parameters, usually the parameters between you just want to be default, but when using it, you must pass parameters to it if you use parameters after it: eg
1 2 3 4 5 6 7 | <span class="token keyword">function</span> <span class="token function-definition function">demo</span><span class="token punctuation">(</span><span class="token variable">$a</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token variable">$b</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token variable">$c</span> <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// handle</span> <span class="token punctuation">}</span> <span class="token comment">// Bây giờ bạn vẫn muốn $b = 1 nhưng $c lại là một số khác thì bạn phải làm như này </span> <span class="token function">demo</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// đấy bạn phải điền lại các tham số mặc định rất mất tg</span> |
Therefore, PHP8 gives us a so called Named arguments, which helps us to ignore the default, options parameters.
1 2 3 | <span class="token comment">// vẫn là function demo($a = 1, $b = 1, $c = 2); ta viết lại như sau :</span> <span class="token function">demo</span><span class="token punctuation">(</span><span class="token variable">$c</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
Just like that, it is enough to understand that we are passing 1 in $c
, the rest keep default.
2.Attributes
Instead of PHPDoc annotations, you can now use structured metadata with PHP’s native syntax.
1 2 3 4 5 6 7 8 9 | <span class="token comment">// PHP 7</span> <span class="token keyword">class</span> <span class="token class-name-definition class-name">PostsController</span> <span class="token punctuation">{</span> <span class="token comment">/** * @Route("/api/posts/{id}", methods={"GET"}) */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">get</span><span class="token punctuation">(</span><span class="token variable">$id</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">/* ... */</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
1 2 3 4 5 6 7 | <span class="token comment">// PHP 8</span> <span class="token keyword">class</span> <span class="token class-name-definition class-name">PostsController</span> <span class="token punctuation">{</span> <span class="token attribute"><span class="token delimiter punctuation">#[</span><span class="token attribute-content"><span class="token attribute-class-name class-name">Route</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"/api/posts/{id}"</span><span class="token punctuation">,</span> <span class="token attribute-class-name class-name">methods</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string double-quoted-string">"GET"</span><span class="token punctuation">]</span><span class="token punctuation">)</span></span><span class="token delimiter punctuation">]</span></span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">get</span><span class="token punctuation">(</span><span class="token variable">$id</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">/* ... */</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
3.Constructor property promotion
In PHP7, when declaring a property of a class, we usually declare its scope on the constructor, and then set it in the constructor:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <span class="token keyword">class</span> <span class="token class-name-definition class-name">Point</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword type-declaration">float</span> <span class="token variable">$x</span><span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token keyword type-declaration">float</span> <span class="token variable">$y</span><span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token keyword type-declaration">float</span> <span class="token variable">$z</span><span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">__construct</span><span class="token punctuation">(</span> <span class="token keyword type-hint">float</span> <span class="token variable">$x</span> <span class="token operator">=</span> <span class="token number">0.0</span><span class="token punctuation">,</span> <span class="token keyword type-hint">float</span> <span class="token variable">$y</span> <span class="token operator">=</span> <span class="token number">0.0</span><span class="token punctuation">,</span> <span class="token keyword type-hint">float</span> <span class="token variable">$z</span> <span class="token operator">=</span> <span class="token number">0.0</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$this</span><span class="token operator">-></span><span class="token property">x</span> <span class="token operator">=</span> <span class="token variable">$x</span><span class="token punctuation">;</span> <span class="token variable">$this</span><span class="token operator">-></span><span class="token property">y</span> <span class="token operator">=</span> <span class="token variable">$y</span><span class="token punctuation">;</span> <span class="token variable">$this</span><span class="token operator">-></span><span class="token property">z</span> <span class="token operator">=</span> <span class="token variable">$z</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Looks pretty long, right? But fortunately, PHP8 keeps this short:
1 2 3 4 5 6 7 8 | <span class="token keyword">class</span> <span class="token class-name-definition class-name">Point</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">__construct</span><span class="token punctuation">(</span> <span class="token keyword">public</span> <span class="token keyword type-declaration">float</span> <span class="token variable">$x</span> <span class="token operator">=</span> <span class="token number">0.0</span><span class="token punctuation">,</span> <span class="token keyword">public</span> <span class="token keyword type-declaration">float</span> <span class="token variable">$y</span> <span class="token operator">=</span> <span class="token number">0.0</span><span class="token punctuation">,</span> <span class="token keyword">public</span> <span class="token keyword type-declaration">float</span> <span class="token variable">$z</span> <span class="token operator">=</span> <span class="token number">0.0</span><span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> |
You can also use it like this:
1 2 3 4 5 6 7 8 | <span class="token keyword">class</span> <span class="token class-name-definition class-name">ManagerController</span> <span class="token keyword">extends</span> <span class="token class-name">ApiController</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">__construct</span><span class="token punctuation">(</span> <span class="token keyword">private</span> <span class="token class-name type-declaration">PostService</span> <span class="token variable">$courseService</span><span class="token punctuation">,</span> <span class="token keyword">private</span> <span class="token class-name type-declaration">UserService</span> <span class="token variable">$temporaryService</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> |
4. Union types
When you declare the type of a variable, you can declare more than one type of that variable
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token comment">// php7</span> <span class="token keyword">class</span> <span class="token class-name-definition class-name">Number</span> <span class="token punctuation">{</span> <span class="token comment">/** @var int|float */</span> <span class="token keyword">private</span> <span class="token variable">$number</span><span class="token punctuation">;</span> <span class="token comment">/** * @param float|int $number */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">__construct</span><span class="token punctuation">(</span><span class="token variable">$number</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$this</span><span class="token operator">-></span><span class="token property">number</span> <span class="token operator">=</span> <span class="token variable">$number</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">new</span> <span class="token class-name">Number</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'NaN'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Ok</span> |
Below will give us the variable, $number
will receive 2 types int|float
If it doesn’t match 1 of the 2, it will fail TypeError
1 2 3 4 5 6 7 8 9 | <span class="token comment">//php8</span> <span class="token keyword">class</span> <span class="token class-name-definition class-name">Number</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">__construct</span><span class="token punctuation">(</span> <span class="token keyword">private</span> <span class="token keyword type-declaration">int</span><span class="token operator">|</span><span class="token keyword type-declaration">float</span> <span class="token variable">$number</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">new</span> <span class="token class-name">Number</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'NaN'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// TypeError</span> |
5. Match
We often use switch cases, but each case in it is too simple, it makes its function longer.
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token comment">// PHP 7</span> <span class="token keyword">switch</span> <span class="token punctuation">(</span><span class="token number">8.0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">case</span> <span class="token string single-quoted-string">'8.0'</span><span class="token punctuation">:</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"Oh no!"</span><span class="token punctuation">;</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token keyword">case</span> <span class="token number">8.0</span><span class="token punctuation">:</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"This is what I expected"</span><span class="token punctuation">;</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">echo</span> <span class="token variable">$result</span><span class="token punctuation">;</span> <span class="token comment">//> Oh no!</span> |
With PHP8 you can use match
, it will help the case of the switch more compact:
1 2 3 4 5 6 | <span class="token keyword">echo</span> <span class="token keyword">match</span> <span class="token punctuation">(</span><span class="token number">8.0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token string single-quoted-string">'8.0'</span> <span class="token operator">=></span> <span class="token string double-quoted-string">"Oh no!"</span><span class="token punctuation">,</span> <span class="token number">8.0</span> <span class="token operator">=></span> <span class="token string double-quoted-string">"This is what I expected"</span><span class="token punctuation">,</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token comment">//> This is what I expected</span> |
6. Nullsafe
If anyone uses js, then you can see that js is similar to this
1 2 3 | <span class="token keyword">let</span> object <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">;</span> object<span class="token operator">?.</span>user<span class="token operator">?.</span>name <span class="token comment">// => null</span> |
In PHP there is also similar to this:
1 2 3 4 5 6 7 | <span class="token variable">$user</span> <span class="token operator">=</span> <span class="token class-name static-context">User</span><span class="token operator">::</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$user</span><span class="token operator">-></span><span class="token property">name</span><span class="token punctuation">;</span> <span class="token comment">// nếu name có,</span> <span class="token comment">// nhưng khi không find ra $user chúng ta sẽ nhận được lỗi, do đó chúng ta cần làm như sau để tránh lỗi</span> <span class="token variable">$user</span><span class="token operator">?-></span><span class="token property">name</span> <span class="token comment">// nếu không có nó sẽ trả về null</span> <span class="token comment">// ngoài ra chúng ta có thể sử dụng nhiều hơn</span> <span class="token variable">$user</span><span class="token operator">?-></span><span class="token property">profile</span><span class="token operator">?-></span><span class="token property">address</span> <span class="token operator">??</span> <span class="token string single-quoted-string">'Default'</span><span class="token punctuation">;</span> |
7. Operators
In addition to operators like:
1 2 3 4 5 6 7 | <span class="token variable">$a</span> <span class="token operator">=</span> <span class="token variable">$a</span> <span class="token operator">?</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token comment">// Ternary</span> <span class="token variable">$a</span> <span class="token operator">=</span> <span class="token variable">$a</span> <span class="token operator">??</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token comment">// Null coalescing</span> <span class="token comment">// Thì chúng ta còn có 1 cái nữa:</span> <span class="token variable">$a</span> <span class="token operator">??=</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token comment">// Cái này sẽ giúp chúng ta gắn luôn nếu $a không có giá trị, hoặc không tồn tại</span> |
Conclude
The above are not new things in PHP7 and PHP8, these are just the ones I often use of each version, there are many new things that I have not mentioned, you can refer to them online. Thank you for watching, I hope you continue to support me.
Refer : https://b29.vn/bai-viet/nhung-cu-phap-hay-ho-khi-ban-lam-viec-voi-php?id=41