1 Câu Trả Lời

Lê Trung

Ví dụ trong câu hỏi của bạn được đưa ra với mục đích hướng dẫn cách sử dụng hàm còn nó chưa thể hiện hết sự cần thiết của hàm này. Lấy một ví dụ sau để bạn dễ hình dung.

Bạn cần phát triển một HTML editor cho người dùng không biết về HTML. Và do đó bạn phát triển tính năng cho phép người dùng thêm mã BB code vào editor khi họ click vào icon trên thanh menu. Ví dụ một BB code như sau:

[img src="http://example.com/my_photo.jpg"]

Thì khi hiển thị bài viết đoạn code trên sẽ chuyển thành mã HTML:

<img srrc="http://example.com/my_photo.jpg">

Ngoài ra nếu người dùng quy định độ rộng và dài của ảnh sử dụng mã BB code sau:

[img src="http://example.com/my_photo.jpg" width=200 height=100]

Thì khi hiển thị bài viết bạn cần chuyển thành mã HTML như sau:

<img srrc="http://example.com/my_photo.jpg" width=200 height=100>

Và HTML editor của bạn cần phải hỗ trợ thẻ <img>, thẻ <a>, thẻ <h1>....

Khi viết xử lý logic chuyển đổi từ mã BB Code sang HTML chúng ta sẽ cần phải trả về các mã HTML khác nhau cho từng thẻ khác nhau (thẻ <img> sẽ không có thẻ đóng, thẻ <a> thì ngược lại). Ngoài ra số lượng attribute của mỗi thẻ không phải lúc nào cũng cố định và dựa trên lựa chọn của người dùng. Lúc này hàm call_user_function() sẽ rất hữu dụng.

Đầu tiên bạn có một danh sách các hàm xử lý việc trả về mã HTML tương ứng cho từng thẻ.

$bbcodeFunctions = array(
    // danh sách hàm xử lý việc trả về HTML cho từng loại thẻ
    'a' => 'aTag',
    'img' => 'imgTag'
);

Và khai báo các hàm này:

// hàm trả về mã HTML, ví dụ cho thẻ <img>

function imgTag($src, $width, $height) {
    // logic trả về mã HTML
}

Lúc này khi viết hàm trả về mã HTML bạn sẽ làm như sau:

function returnHTML( $tag, $atts = array(), $content = null ) {

    global $bbcodeFunctions;

    if ( ! isset( $bbcodeFunctions[ $tag ] ) )
        return "";

    return call_user_func( $bbcodeFunctions[ $tag ], $atts, $content );
}

Với trường hợp trên nếu không sử dụng call_user_func() bạn sẽ cần viết rất nhiều logic để tách biệt các trường hợp ứng với mỗi input nhập vào của người dùng.

Phuong Jenny 07 January 2017

Ví dụ bạn đưa ra rất hay!

Thêm bình luận
Huỷ

Thêm Trả Lời

Câu Hỏi Liên Quan