• Downloading from our site will require you to have a paid membership. Upgrade to a Premium Membership from 10$ a month today!

    Dont forget read our Rules! Also anyone caught Sharing this content will be banned. By using this site you are agreeing to our rules so read them. Saying I did not know is simply not an excuse! You have been warned.

Admin

Well-Known Member
Staff member
Administrator
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 :

PHP:
// 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 đó :

PHP:
// 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 ~~
PHP:
// 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 :

PHP:
// Lấy tất cả file có đuôi .php và .txt
//GLOB_BRACE : ở trong {} sẽ dc 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 :
PHP:
$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() :

PHP:
$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ả hok 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() , để lấy bộ nhớ maximum được sử dụng trong cả quá trình, dùng memory_get_peak_usage() :
PHP:
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ẽ hok đi từng constant, mà chỉ giới thiệu 1 vài ví dụ hữu ích :

PHP:
// đâ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 sẽ 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 :

PHP:
// 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 đó !

PHP:
// 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()
PHP:
// 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 :

PHP:
// 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()

PHP:
// 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() :

PHP:
// 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()

PHP:
$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è :

PHP:
// 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ẽ hok 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ì !

PHP:
$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.";
}

Chúc các bạn thành công!
 

Facebook Comments

Similar threads
Thread starter Title Forum Replies Date
H Phần mềm PC Phần mềm số một trong việc chặn các web đen, web game độc hại gây ảnh hưởng đến con trẻ Phần mềm 0
T Điểm qua một số kiến thức nền tảng về web Tin tức CNTT 0
T Một số ngôn ngữ lập trình chưa bao giờ hết HOT Tin tức CNTT 0
T Một số yếu tố quan trọng để bạn trở thành lập trình Tin tức CNTT 0
T Một số cách học lập trình bạn hãy tham khảo Tin tức CNTT 0
T Một số siêu ngân hàng đầu tư vào tiền kỹ thuật số Finality Tin tức CNTT 0
Admin Share một số tut chiến Facebook Ad Breaks theo kinh nghiệm Tut, tool, mmo 0
T McKinsey & Co: Báo cáo một số vấn đề của Blockchain Tin tức CNTT 0
T Một số quy định pháp lý mới cho ICO tại Bermuda Tin tức CNTT 0
C Một số câu hỏi phỏng vấn quản trị hệ thống Thảo luận chung 0
thambatuoc Nhạc Ma Quái Gây Nghiện - Những Bản Nhạc Điện Tử Gây Nghiện Hay Nhất - Số Một Thế Giới Âm nhạc 0
B Một số mô hình phát triển phần mềm Tin tức CNTT 0
N Một số mô hình phát triển phần mềm Tin tức CNTT 0
H Cách Dùng Shell Và Một Số Lệnh Cơ Bản Nhất Thủ thuật máy tính 0
B Hướng dẫn Tổng hợp một số thủ thuật hữu íchcho Android 4.4 KitKat Android, iOS 0
V một số hồ nước đẹp Hình ảnh đẹp 0
Tuzoro Android Một số Thuật Ngữ về Android cho Newbie Android, iOS 0
L0ngHackit Share Một Số Chiến Thuật Seo Website Lên Top 10 Thảo luận SEO 3
Admin Blackberry Messenger sẽ được cài sẵn trên một số máy của LG Android, iOS 0
Admin Share một số code grab hay Mã nguồn wap 0
Whisky Một số hình ảnh mới của Dragon Ball Z: Battle of Z Trò chơi 0
Admin Một số hình ảnh chụp nhanh từ iPhone 5c Hình ảnh 0
Admin Windows Phone lần đầu đạt thị phần trên 10% ở một số quốc gia Châu Âu Tin tức CNTT 1
Admin Apple thuê giám đốc bộ phận phát triển Nike FuelBand để thiết kế một số thiết bị đeo được? Tin tức CNTT 1
Admin Một số thủ thuật tùy biến All Apps trong Windows 8 Sử dụng, chia sẻ, hỏi đáp 1
Admin Hướng dẫn cách tạo nhiều blog và một số vấn đề về blog xtgem Wap builder, wapego, xtgem, wen.ru, wapka, wap4 0
Admin Một số thủ thuật và cách sử dụng iOS 7 mới: Spotlight, Facetime Audio, Wish List, chặn cuộc gọi/SMS Thủ thuật ĐTDĐ 2
H Android Một số Thuật Ngữ vềAndroid cho Newbie!!! Android, iOS 0
Admin Một số phần mềm có chứng nhận signed s40 S40 1
Admin Một số phím tắt windows 7 bạn nên biết Thủ thuật máy tính 0
Admin Một số lệnh đặc biệt trong run Sử dụng, chia sẻ, hỏi đáp 0
blog4me Share Tổng hợp một số TUT chơi CC Security - Local - Hacking 2
Myshare Hướng dẫn Một số công dụng hữu ích của file .htaccess All Shared Scripts 0
Admin Một số lệnh ăn gian trong đế chế Sử dụng, chia sẻ, hỏi đáp 3
Admin Một số lệnh half life thường dùng Sử dụng, chia sẻ, hỏi đáp 2
Admin Một số phím tắt windows 7 bạn nên biết Sử dụng, chia sẻ, hỏi đáp 0
S Một số ứng dụng ghép Phần mềm 3
Admin Một số lệnh ssh và scripts của cpanel VPS & Dedicated Server 0
H Một số từ khoá game trên mobile hot Xem thêm: Một số từ khoá game trên mobile hot Cộng đồng Diễn Đ Thảo luận SEO 0
Myshare Share javascript với một số wap 18+ xác nhận tuổi của người truy cập...hay Javascript/ajax 0
S Hướng dẫn Một số thủ thuật hữu ích với Windows Task Manager Sử dụng, chia sẻ, hỏi đáp 0
Admin Một số câu lệnh ssh kiểm tra server khi bị tấn công DDoS VPS & Dedicated Server 0
HocVN.Net Xin Một số rss Thảo luận wap việt 0
G Một số kĩ thuậttấn công phổ biến củahacker Security - Local - Hacking 0
JohnHary Một số lưu ý khi seo wap trên mobile Thảo luận SEO 0
G Một số mã lệnh Game Hafflife thường dùng VBP[II] Trò chơi 0
Admin Danh sách một số site trial VPS VPS & Dedicated Server 0
Admin [Tổng hợp] một số themes cho S60 S60 2
S Gom hết đời người vào một mã số Tin tức, sự kiện thường ngày 0
Admin S60 Tổng Hợp Một Số Theme Đẹp S60 0

Similar threads

New posts New threads New resources

Back
Top