Những cú pháp hay ho khi bạn làm việc với Php
- Tram Ho
Ở đây mình chỉ nói chung chung trong qua từng version chứ ko nói cụ thể nha, nếu bạn không dùng được chúng, thì hãy tra nó ở version nào có thể sử dụng nhé.
1. Bắt đầu từ php7
Kể từ khi ra mắt php7, tốc độ trong PHP 7 được cải thiện đến đáng kinh ngạc khi nó nhanh hơn PHP 5 ít nhất 2 lần, nếu bạn biết tối ưu thì nó còn nhanh hơn nữa, có thể lên đến 3-4 lần
1. Khai báo kiểu của biến và kiểu trả về
Ở php5, chúng ta chỉ có 2 kiểu type-hint đó là class
và array
. Còn với php7 chúng ta có có thêm các kiểu như : 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> |
Như các bạn đã thấy, chúng ta có thể khai báo các type của biến và có thể chỉ định type trả về của hàm.
Ở php7.4 nó còn được support nhiều hơn :
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. Toán tử mới
- 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 :
??
. Nó được sử dụng để thay thế phép toán ba ngôi kết hợp với hàm Isset()
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
Chúng ta có Anonymous function như này:
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> |
ở php7, chúng ta còn có thêm 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) ?
Nghe quen quen, giống trong 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> |
Và trông php ta cũng làm tương tự :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> |
Ngày càng thấy code php giống như code js phải ko
4. Arrow function
Trong php7.4, bạn có thể viết function ngắn gọn hơn với arrow function, nó giống như js vậy :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> |
Nhiều ví dụ hơn kết hợp 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
Chắc bạn đã thấy người ta dùng threedots (...
) trong js rồi nhỉ ? vâng, php cũng làm được đấy :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> |
Quá xịn luôn phải không nào ?
Nhìn sơ qua thì php 7 chúng ta sẽ có những cái trên gọi là mới mẻ, và hay sử dụng nhất.
2. Đến php8 có gì mới ?
Php8 là một bản cập nhật mới, nó chứa nhiều tính năng tối ưu hoá hơn và cũng tăng tốc độ xử lí lên đôi chút. Chúng ta cùng điểm qua một số thứ hay ho trên php8 nhé.
1. Named arguments
Ở php7, khi đặt một hàm có nhiều tham số, thông thường các tham số giữa bạn chỉ muốn để default nhưng khi sử dụng bạn bắt buộc phải truyền tham số cho nó nếu bạn có sử dụng tham số sau nó : VD
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> |
Do đó, php8 cho chúng ta 1 cái gọi là Named arguments, nó giúp chúng ta bỏ qua các tham số default, options.
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> |
Chỉ cần như vậy, nó cũng đủ hiểu chúng ta đang truyền 1 vào $c
, còn lại giữ default.
2.Attributes
Thay vì chú thích PHPDoc, giờ đây bạn có thể sử dụng siêu dữ liệu có cấu trúc với cú pháp gốc của PHP.
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
Ở php7, khi khai báo một property của class, ta thường khai báo phạm vi của nó trên hàm khởi tạo, sau đó rồi set nó trong hàm khởi tạo luôn:
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> |
Nhìn khá dài đúng ko ? nhưng may thay, php8 giúp ta ngắn gọn điều này :
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> |
Bạn cũng có thể sử dụng nó như này :
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
Khi bạn khai báo type của biến, bạn có thể khái báo nhiều loại của biến đó
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> |
Dưới đây sẽ cho chúng ta biến, $number
sẽ nhận 2 type là int|float
nếu không hợp 1 trong 2 nó sẽ lỗi 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
Chúng ta hay dùng switch case nhưng từng case trong đó quá đơn giản thì khiến hàm nó dài lên.
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> |
VỚi php8, bạn có thể sử dụng match
, nó sẽ giúp các case của switch gọn hơn:
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
Nếu ai dùng js rồi, thì bạn có thể thấy js cũng tương nhự như này
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> |
Trong php cũng có tương tự như này :
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
Ngoài các toán tử như :
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> |
Kết
Bên trên không phải là những cái mới trong php7 và php8 nhé, đây chỉ là những cái mình hay sử dụng của từng phiên bản, còn nhiều cái mới mà mình chưa nói ra hết được, các bạn tham khảo trên mạng nhé. Cảm ơn các bạn đã theo dõi, mong các bạn tiếp tục ủng hộ mình.
Tham khảo : https://b29.vn/bai-viet/nhung-cu-phap-hay-ho-khi-ban-lam-viec-voi-php?id=41