Một số điều thú vị của PHP có thể bạn ít dùng
Mình xin đưa ra một số trường hợp khá thú vị của PHP mà có thể bạn ít dùng, và có lẽ bạn không nên dùng =)) $$ Chúng ta đều biết rằng biến của PHP được gọi bắt đầu từ dấu $: $a = 10 ; echo $a ; Kết quả ra màn hình sẽ là 10 rồi nhỉ. Vậy còn trường hợp này thì bạn nghĩ sao? ...
Mình xin đưa ra một số trường hợp khá thú vị của PHP mà có thể bạn ít dùng, và có lẽ bạn không nên dùng =))
$$
Chúng ta đều biết rằng biến của PHP được gọi bắt đầu từ dấu $:
$a = 10; echo $a;
Kết quả ra màn hình sẽ là 10 rồi nhỉ. Vậy còn trường hợp này thì bạn nghĩ sao?
$a = 10; $b = 'a'; echo $$b;
Rồi nhiều $ nữa thì có được không nhỉ?
$a = 10; $b = 'a'; $c = 'b'; echo $$$c;
Mời các bạn test và trải nghiệm.
Nếu bạn vô tình đọc code của ai đó mà thấy $$ thì có lẽ bạn sẽ nghĩ họ code lỗi ấy nhỉ?
file_get_contents()
Có lẽ bạn đã biết hàm này, nó có thể đọc nội dung của một file nào đó rồi trả về string:
$fileContent = file_get_contents($fileName);
Thậm chí nó còn có thể lấy được nội dung của một web nào đó:
$google = file_get_contents('http://www.google.com.vn/');
Nếu bạn muốn post một dữ liệu gì đó lên URL nào đó, có lẽ bạn sẽ nghĩ đến cURL, nhưng bạn có biết file_get_contents() cũng có thể làm được điều này?
$postData = http_build_query([ 'username' => 'someone', 'password' => 'secret', ]; $options = [ 'http' => [ 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postData, ] ]; $context = stream_context_create($options); $output = file_get_contents('http://example.com/submit.php', false, $context);
Call a method of class
Nếu bạn muốn gọi một method (giả sử là static method) của một class A nào đó, bạn có thể gọi bằng những cách nào? VD class A:
class A { public static function talk() { echo "I'm A"; } }
Cách truyền thống có lẽ là đây nhỉ?
A::talk();
Tiếp, có lẽ bạn cũng đã từng thấy cách này nhỉ:
$class = 'A'; $class::talk();
hoặc...
$class = 'A'; $method = 'talk'; $class::$method();
Oki, mạnh tay hơn cách trên, bạn đã thử hay thấy ai đó dùng cách này chưa?
'A'::talk();
hoặc...
$method = 'talk'; 'A'::$method();
Yeah, và có lẽ chúng ta cũng nên kể đến cả hàm hỗ trợ sẵn của PHP nhỉ?
call_user_func(['A', 'talk']);
hoặc...
call_user_func_array(['A', 'talk'], []);
Không chỉ dừng lại ở đây, bạn có thể sẽ ngạc nhiên khi PHP cũng có thể gọi bằng cách này:
$func = 'A::talk'; $func(); // PHP >= 7.0.0
hoặc...
$func = ['A', 'talk']; $func();
Object Reference
Khi $a là một Object và $b = $a thì $b chứa cái gì của Object? $b có giống hoàn toàn $a không? Và nó khác gì so với $b = &$a không? VD đoạn code sau:
class A { public $x; } $a = new A(); $a->x = 10; $b = $a; $b->x = 20; echo $a->x;
Có lẽ nhiều bạn sẽ trả lời được rằng kết quả in ra màn hình sẽ là 20 nhỉ. Ok, vậy ví dụ này, bạn nghĩ nó sẽ in ra màn hình bao nhiêu?
class A { public $x; } $a = new A(); $a->x = 10; $b = $a; $b = new A(); $b->x = 20; echo $a->x;
10 hay 20 nhỉ? Kết quả là 10 bạn nhé. Vì lúc $b = new A(); thì $b sẽ trỏ tới đối tượng khác, không liên quan tới $a nữa. Rồi, vậy còn trường hợp này thì sao? (Khác nhau ở đoạn gán $a cho $b
class A { public $x; } $a = new A(); $a->x = 10; $b = &$a; $b = new A(); $b->x = 20; echo $a->x;
Bạn tự test để kiểm tra nhé