XtGem Forum catalog

CuDemVN.Wap.Sh

- GetSmile.Mobie.In - Diễn đàn chia sẻ Cú đêm Việt Nam
- AiChat.Wap.Sh - Diễn đàn Xtgem Việt Nam
- HamTruyen.Xtgem.Com - Blog Ham Truyện nơi hội tụ của những tín đồ mê truyện chữ
* Trang chủ >> WapMaster
Tìm Kiếm Thảo Luận
↓↓

Chia sẻ một số hàm rất hữu ích trong PHP nhưng được ít người biết đến

Admin* RoSino18k *
* 20-07-2016

Các hàm rất hữu ích trong PHP bạn cần biết!


1/ Hàm có bao nhiêu tham số cũng được


Bạn có thể đã biết trong PHP chúng ta có thể tạo hàm với các tham số có giá trị mặc định ban đầu. Nhưng có 1 phương pháp cho phép 1 hàm chấp nhận mọi tham số !

Ví dụ đầu tiên với hàm có tham số có giá trị mặc định :
// Hàm có 2 tham số mặc định
function foo($arg1 = '', $arg2 = '') {
echo "arg1: $arg1\n";
echo "arg2: $arg2\n";
}
foo('hello','world');
/* Xuất
arg1: hello
arg2: world
*/

foo();
/* Xuất
arg1:
arg2:
*/

Bây giờ, hãy cùng xây dựng 1 hàm có thể truyền vào mọi tham số. func_get_args() sẽ giúp chúng ta làm điều đó:
// Tham số để rỗng nhé
function foo() {
// returns an array of all passed arguments
$args = func_get_args();
foreach ($args as $k => $v) {
echo "arg".($k+1).": $v\n";
}
}
foo();
/* Không xuất gì cả */

foo('hello');
/* Xuất
arg1: hello
*/

foo('hello', 'world', 'again');
/* Xuất
arg1: hello
arg2: world
arg3: again
*/

2/ Sử dụng GLOB() để tìm files


Nhiều hàm trong PHP có tên dài và có tính mô tả chức năng của nó . Tuy nhiên, thật khó để nói hàm glob() có nhiệm vụ gì nếu chúng ta chưa từng sử dụng qua.

Thật ra, glob() có chức năng như hàm scandir() nhưng là 1 phiên bản cao cấp hơn ~~
// Lấy hết tất cả các file đuôi .php
$files = glob('*.php');
print_r($files);
/* Xuất
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
)
*/

Bên cạnh đó, chúng ta có thể lấy ra nhiều file:
// Lấy tất cả file có đuôi .php và .txt
//GLOB_BRACE : ở trong {} sẽ được hiểu là hoặc << hoặc php hoặc txt thì lấy ra
$files = glob('*.{php,txt}', GLOB_BRACE);
print_r($files);
/* Xuất
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
[4] => log.txt
[5] => test.txt
)
*/

File cũng có thể được lấy ra với đường dẫn:
$files = glob('../images/a*.jpg');
print_r($files);
/* Xuất
Array
(
[0] => ../images/apple.jpg
[1] => ../images/art.jpg
)
*/

Còn nếu bạn muốn lấy đường dẫn đầy đủ, chỉ cần dùng realpath()
$files = glob('../images/a*.jpg');
// sử dụng hàm đến mỗi phần tử mảng
$files = array_map('realpath',$files);
print_r($files);
/* output looks like:
Array
(
[0] => C:\wamp\www\images\apple.jpg
[1] => C:\wamp\www\images\art.jpg
)
*/

Tất nhiên các ví dụ ở trên bạn test sẽ cho ra kết quả khác, vì folder trong máy của tác giả không giống với folder của bạn . Tùy cơ ứng biến nhé ^^

3/ Thông tin bộ nhớ được sử dụng


Nếu biết được thời gian chạy script, bạn sẽ tối ưu code tốt hơn !
PHP có 1 bộ xử lý bộ nhớ rất phức tạp. Sự sử dụng bộ nhớ của đoạn script có thể tăng, giảm trong khi nó nó chạy. Để lấy bộ nhớ hiện tại đang được sử dụng, chúng ta dùng memory_get_usage(), còn để lấy bộ nhớ maximum được sử dụng trong cả quá trình thì dùng memory_get_peak_usage()
echo "Ban đầu: ".memory_get_usage()." bytes \n";
/* prints
Ban đầu: 361400 bytes
*/
// Sử dụng bộ nhớ nào
for ($i = 0; $i < 100000; $i++) {
$array []= md5($i);
}
// Loại bỏ mảng
for ($i = 0; $i < 100000; $i++) {
unset($array[$i]);
}
echo "Cuối cùng : ".memory_get_usage()." bytes \n";
/* Xuất
Cuối cùng: 885912 bytes
*/
echo "Cao nhất: ".memory_get_peak_usage()." bytes \n";
/* Xuất
Cao nhất: 13687072 bytes
*/


4/Magic Constants


PHP cung cấp một số magic_constants hữu ích như :
lấy ra dòng hiện tại (__FILE__), lấy ra đường dẫn hiện tại (__FILE__), lấy ra thư mục (__DIR__), tên hàm (__FUNCTION__), tên lớp (__CLASS__), tên method (__METHOD__) và namespace (__NAMESPACE__)

Chúng ta sẽ không đi từng constant, mà chỉ giới thiệu 1 vài ví dụ hữu ích:
// đây là đường dẫn tương đối
// Có thể bạn sẽ gặp lỗi nếu chạy script từ thư mục khác đấy nhé
require_once('config/database.php');
require_once(dirname(__FILE__) . '/config/database.php');

Bạn hãy chạy script trên, đừng tạo file database.php trong folder "config" nhé, để hiểu __FILE__ có nhiệm vụ gì, bạn cứ việc copy →paste →chạy. Bạn đã thấy lỗi chưa ?
Nếu thấy rồi, bạn đảo thứ tự của 2 dòng require_once() trên, bạn chạy lại và sẽ hiểu ^^

Lưu ý nên sử dụng __FILE__ khi include script khác bạn nhé.
Sử dụng __LINE__ sẽ giúp chúng ta debug dễ hơn. Bạn có thể tìm ra số thứ tự của dòng:
// some code
// ...
my_debug("some debug message", __LINE__);
/* Xuất
Line 4: some debug message
*/

// some more code
// ...
my_debug("another debug message", __LINE__);
/* Xuất
Line 11: another debug message
*/

function my_debug($msg, $line) {
echo "Line $line: $msg\n";
}


5/ Tạo ID đặc biệt


Có 1 vài trường hợp chúng ta cần phải tạo ra những chuỗi đặc biệt (không trùng lặp), người ta thường dùng md5() để làm điều này, nhưng md5() không thực sự sinh ra để làm điều đó!
// generate unique string
echo md5(time().mt_rand(1,1000000));

Có 1 hàm chuyên dùng để xử lý điều đó trong PHP tên là: uniqid()
// Tạo chuỗi đặc biệt
echo uniqid();
/* Xuất
4bd67c947233e
*/
// Tạo 1 chuỗi đặc biệt khác
echo uniqid();
/* Xuất
4bd67c9472340
*/

Có thể bạn đang thắc mắc rằng dù hàm tạo chuỗi đặc biệt nhưng có 1 số kí tự đâu tiên giống hệt nhau mỗi khi chạy ! Bởi vì việc tạo chuỗi này phụ thuộc vào thời gian server.

Để giảm cơ hội chúng có thể y chang nhau, chúng ta thêm prefix vào:
// với prefix
echo uniqid('foo_');
/* Xuất
foo_4bd67d6cd8b8f
*/
// với nhiều kí tự hơn
echo uniqid('',true);
/* Xuất
4bd67d6cd8b926.12135106
*/
// prefix và nhiều kí tự hơn
echo uniqid('bar_',true);
/* Xuất
bar_4bd67da367b650.43684647
*/

Hàm này sẽ tạo chuỗi với số kí tự ít hơn md5(), sẽ giúp bạn tiết kiệm thời gian hơn.

6/ Serialization


Bạn đã bao giờ lưu 1 biến phức tạp vào database hay file ? Bạn không cần phải có những giải pháp của mình để chuyển đổi mảng về dạng chuỗi rồi nạp vào, bởi vì PHP đã có vào hàm dùng với mục đích này!

Chúng ta sẽ tìm hiểu 2 hàm: serialize()unserialize()
// 1 mảng phức tạp
$myvar = array(
'hello',
42,
array(1,'two'),
'apple'
);
// convert to a string
$string = serialize($myvar);
echo $string;
/* Xuất
a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:"two";}i:3;s:5:"apple";}
*/
// Bạn có thể lấy lại mảng ban đầu
$newvar = unserialize($string);
print_r($newvar);
/* Xuất
Array
(
[0] => hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)

[3] => apple
)
*/

Tuy nhiên, từ khi JSON trở nên phổ biến, họ đã quyết định thêm sự hỗ trợ vào PHP5.2. Bây giờ bạn có thể sử dụng json_encode()json_decode()
// Mảng phức tạp
$myvar = array(
'hello',
42,
array(1,'two'),
'apple'
);
// Chuyển đổi mảng thành string
$string = json_encode($myvar);
echo $string;
/* Xuất
["hello",42,[1,"two"],"apple"]
*/
// Lấy lại mảng ban đầu
$newvar = json_decode($string);
print_r($newvar);
/* Xuất
Array
(
[0] => hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)

[3] => apple
)
*/

Có vẻ 2 hàm này nhỏ gọn hơn nhỉ ^^ . Hơn thế nữa, chúng tương thích với javascript và 1 số ngôn ngữ khác. Tuy nhiên, cho những đối tượng phức tạp quá, có thể sẽ bị mất thông tin đấy!

7/ Nén chuỗi


Khi nói về sự nén, chúng ta cứ nghĩ là nến file zip !! Nhưng chúng ta hoàn toàn có thể nén 1 chuỗi phức tạp trong PHP.

Ở ví dụ sau đây, chúng ta sẽ dùng hàm gzcompress()gzuncompress()
$string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ut elit id mi ultricies adipiscing. Nulla facilisi. Praesent pulvinar, sapien vel feugiat vestibulum, nulla dui pretium orci, non ultricies elit lacus quis ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam pretium ullamcorper urna quis iaculis. Etiam ac massa sed turpis tempor luctus. Curabitur sed nibh eu elit mollis congue. Praesent ipsum diam, consectetur vitae ornare a, aliquam a nunc. In id magna pellentesque tellus posuere adipiscing. Sed non mi metus, at lacinia augue. Sed magna nisi, ornare in mollis in, mollis sed nunc. Etiam at justo in leo congue mollis.
Nullam in neque eget metus hendrerit scelerisque eu non enim. Ut malesuada lacus eu nulla bibendum id euismod urna sodales.";
$compressed = gzcompress($string);
echo "Size ban đầu: ". strlen($string)."\n";
/* Xuất
Size ban đầu: 800
*/
echo "Size sau khi nén: ".strlen($compressed)."\n";
/* Xuất
Size sau khi nén: 418
*/
// Lấy lại chuỗi ban đầu
$original = gzuncompress($compressed);

Chúng ta có thể tiết kiệm tới 50% tổng kích thước đấy! Bên cạnh đó, 2 hàm gzencode()gzdecode() cũng làm điều tương tự nhưng dùng thuật toán khác thôi.

8/ Đăng kí 1 hàm shutdown


Với hàm register_shutdown_function(), chúng ta có thể làm 1 vài chuyện trước khi script ngừng chạy.

Ví dụ đếm thời gian chạy script nè:
// Lấy thời gian bắt đầu chạy
$start_time = microtime(true);
// Code ở đây
// ...

// Xuất code đã chạy được bao lâu rồi
echo "Thời gian chạy script : ".
(microtime(true) - $start_time)." seconds.";

Với cái nhìn đầu tiên, có thể bạn thấy thật tầm thường !! Đoạn code trên chỉ là thêm đoạn code tính thời gian ở cuối script. Tuy nhiên, nếu bạn gọi hàm exit() , đoạn code trên sẽ không bao giờ chạy được. Thay vào đó, nó sẽ thông báo lỗi, hoặc là khi script bạn bị kết thúc bởi người dùng, bằng cách nhấn nút stop trên trình duyệt chẳng hạn !!!

Khi bạn sử dụng register_shutdown_function(), đoạn code của bạn sẽ chạy bất kể nó bị ngừng đột xuất vì lí do gì !
$start_time = microtime(true);
register_shutdown_function('my_shutdown');
// Code ở đây
// ...
function my_shutdown() {
global $start_time;
echo "Thời gian chạy script : ".(microtime(true) - $start_time)." seconds.";
}

Trên đây là các hàm hữu ích trong PHP tuy nhiên lại ít người biết đến. Bạn thật may mắn khi đọc được bài viết này vui
Chúc các bạn thành công!

Nguồn: Prince - DaiVietPDA
↑↑ Lượt xem: 562
score
Đánh giá: 4.5/ 5, 562 bình chọn
- Chia sẻ:G  T
BBCode:

Link:
+ Còn “nhiều” Lắm!
+

Share code Diễn đàn trên Xtgem Full chức năng cực chất GetSmile.Mobie.In bởi Cú Đêm Việt Nam

+

Share code PHP hiển thị thông tin khách đang online trên Site

+

Sử dụng HTML và CSS tạo hiệu ứng hiển thị mô tả khi di chuột vào hình ảnh

+

Ajax là gì? Hướng dẫn code cơ bản khi xử lý dữ liệu với jQuery Ajax

+

Share full code PHP bộ tool cài đặt và quản lý Filelist KhoTruyen365 Xtgem

Trang chủ Cú Đêm Việt Nam Trang Chủ[1-2-562]