Một vài điều bạn chưa biết về PHP

PHP nâng cao 17/10/2017 07:00 632
Xin chào. Trong bài viết này mình sẽ chia sẻ với các bạn một số hàm và một số thủ thuật/ câu lệnh php mà có thể mọi người không để ý hoặc không biết nó tồn tại

1. Lệnh goto (PHP >= 5.3). 

Nếu bạn đã từng lập trình với ngôn ngữ basic hoặc ngôn ngữ tầng thấp hơn như assembly hẳn sẽ biết đến câu lệnh này :), tuy nhiên php trước đây lại không được hỗ trợ. Ở phiên phản cập nhật 5.2 lên 5.3 thì hàm này cuối cùng cũng được thêm vào php, nó chủ yếu được sử dụng để ngắt vòng lặp hoặc tránh trường hợp phải if cả 1 đoạn code dài. Câu lệnh goto được sử dụng như trong ví dụ sau :

Cách thông thường:

if ($somethingIsTrue) {
    //do lots of stuff here;
}
// continue here;

Với lệnh goto.

if (!$somethingIsTrue) {
    goto cont;
}
//do lots of stuff here
cont : //continue here;

Ví dụ:

<?php 
	$a = 1;
	if($a==1){
		goto b;
	}else if($a==2){
		goto c;
	}
	echo 'Học lập trình tại www.chiasephp.net';
	die();
	b:
	echo 'Học lập trình PHP tại www.chiasephp.net';
	die();
	c:
	echo 'Học lập trình MYSQL tại www.chiasephp.net';
	die();
?>

Kết quả:

Học lập trình PHP tại www.chiasephp.net

Việc này sẽ giúp việc phải if hoặc else với một lượng code lớn, nhìn mất thẩm mỹ :D, tuy nhiên, với những người không quen, nó sẽ trở thành một đoạn code rất khó đọc ^^~ vì vậy trước khi dùng, mọi người hãy cân nhắc thật kỹ. 

2. boolval() (PHP >= 5.5)

Hẳn mọi người ai cũng đã quen thuộc với hàm empty() của PHP để check xem một biến có phải là array rỗng không, có phải null không, có giá trị > 0 hay không, là string rỗng hay có ký tự, true or false. và dùng !empty() để check một biến không nằm vào các trường hợp trên, tuy nhiên việc phải thêm dấu ! vào trước một hàm luôn làm người đọc khó nhìn, nếu không chú ý có thể bị hiểu nhầm flow của code. ở phiên bản PHP 5.5 thì php đã thêm vào hàm boolval(), hàm này sẽ có giá trị trả về ngược với hàm empty().

boolval ($a) = !empty($a);

3. array_column() (PHP 5.5)

Cú pháp:

array array_column ( array $array , mixed $column_key [,mixed $index_key = null] )

Các hàm làm việc với array của php từ trước đến nay vốn rất tuyệt vời, và ở phiên bản PHP 5.5, php đã làm cho nó tuyệt vời hơn với array_column, hàm này giúp bạn thực hiện việc lấy các giá trị của một mảng dạng như “SELECT some_column FROM database” sql. ví dụ sau đây sẽ giúp mọi người hiểu rõ hơn về hàm này :

<?php 
	$samples = array(
		array(
			'id' => 2135,
			'first_name' => 'John',
			'last_name' => 'Doe',
		),
		array(
			'id' => 3245,
			'first_name' => 'Sally',
			'last_name' => 'Smith'
		),
		array(
			'id' => 5342,
			'first_name' => 'Jane',
			'last_name' => 'Jones'
		),
		array(
			'id' => 5623,
			'first_name' => 'Peter',
			'last_name' => 'Doe'
		)
	);
	$f_names = array_column($samples, 'first_name');
	print_r('<pre>');
	print_r($f_names);
	
	$l_names = array_column($samples, 'last_name', 'id');
	print_r($l_names);
?>

Kết quả sẽ là:

Array
(
    [0] = John
    [1] = Sally
    [2] = Jane
    [3] = Peter
)

Và có index key.

Array
(
    [2135] = Doe
    [3245] = Smith
    [5342] = Jones
    [5623] = Doe
)

4. Hàm array_filter()

Cú pháp:

array array_filter ( array $array = array() [, callable $callback = Function() ] )

Là một hàm về function nữa của php khá hay, dùng để lọc ra những phần tử trong mảng phù hợp với một điều kiện nhất định. ví dụ như ta muốn lấy tất cả các phần tử chia hết cho 5 ở trong một mảng, thay vì for toàn bộ bảng, lấy ra những phần thử chia hết cho 5 thì có thể dùng array_filter với đoạn code đơn giản như sau:

Viết thông thường.

<?php 
	$a = array(3,25,10,5,4,1,44,20,23,65);
	$b = array();
	// Loop
	for($i=0; $i<count($a); $i++){
		if($a[$i]%5===0){
			$b[] = $a[$i];
		}
	}
	print_r('<pre>');
	print_r($b);
?>

Kết quả:

Array
(
    [0] => 25
    [1] => 10
    [2] => 5
    [3] => 20
    [4] => 65
)

Sử dụng array_filter.

<?php 
	$a = array(3,25,10,5,4,1,44,20,23,65);
	function callback($a) {
		return ($a % 5 === 0);
	}
	$b = array_filter($a, callback);
	print_r('<pre>');
	print_r($b);
?>

Kết quả:

Array
(
    [1] => 25
    [2] => 10
    [3] => 5
    [7] => 20
    [9] => 65
)

P/s: Nếu không có hàm callback, array_filter sẽ loại bỏ các phần tử bị tính là empty (0,”,null,false,[]…):

<?php 
	$a = array(3,null,10,'test',4,0,44,20,23,65);
	$b = array_filter($a);
	print_r('<pre>');
	print_r($b);
?>

Kết quả:

Array
(
    [0] => 3
    [2] => 10
    [3] => test
    [4] => 4
    [6] => 44
    [7] => 20
    [8] => 23
    [9] => 65
)

5. Kết luận.

Trên đây chỉ là một vài chia sẻ trng quá trình mình làm việc và học hỏi đúc rút ra được. Mong rằng bài viết sẽ hữu ích với các bạn.

Xem Thêm

Profile photo of adminTheHalfHeart

B.V.T

Sinh ra và lớn nên ở Bắc Giang. Hiện tại thì tôi đang là một lập trình viên tại VietISO. Tôi lập website này với mục đích là bookmark những gì tôi đã đọc qua và mong muốn chia sẻ những gì tôi biết.