2012-12-15 29 views
5

Tôi phải làm:Làm thế nào để gọi một hàm trên một biến trong PHP?

 
$sourceElement['description'] = htmlspecialchars_decode($sourceElement['description']); 

Tôi muốn tránh đề cập thừa của tên biến. Tôi cố gắng:

 
htmlspecialchars_decode(&$sourceElement['description']); 

 
call_user_func('htmlspecialchars_decode', &$sourceElement['description']); 

Đó không làm việc. Điều này có thể trong PHP? Gọi hàm trên một biến?

Trả lời

2

Nó phụ thuộc vào chức năng. htmlspecialchars_decode() trả về kết quả, nó không sửa đổi biến gốc. Và bạn không thể làm gì về nó.

+0

Tôi không hiểu tại sao bất kỳ câu trả lời nào khác được tốt hơn lựa chọn thay thế hơn là chỉ chấp nhận PHP hoạt động như thế nào. +1 không đăng bất kỳ cách giải quyết không cần thiết nào. –

3

Giải pháp chính xác sẽ bao gồm biến "dự phòng" đề cập đến. Nó dễ đọc hơn nhiều, và ít khó hiểu hơn theo cách đó.

$sourceElement['description'] = htmlspecialchars_decode($sourceElement['description']); 

cách bạn suy nghĩ là tốt tuy nhiên, bạn đang suy nghĩ làm thế nào để rút ngắn mã của bạn, giống như một lập trình viên lười biếng thật =)

7

Bạn có thể tạo chức năng bao bọc của riêng bạn mà mất biến bằng cách tham khảo:

function html_dec(&$str) {$str = htmlspecialchars_decode($str);} 

Sau đó gọi:

html_dec($sourceElement['description']); 
+0

Giải pháp và thông tin tuyệt vời, cảm ơn. Tôi chấp nhận một trong những khác vì các thông tin thêm về hành vi bản địa (* thở dài * mà đã được chỉnh sửa ra sau này). –

+0

... Và sau đó tôi thực hiện các chức năng mới như thế này cho tất cả các hàm PHP trả về các giá trị, mà tôi muốn sử dụng? Trong trường hợp đó, tốt hơn hết là nên tìm một ngôn ngữ khác ... –

2

Hầu hết các chức năng trong PHP là không thay đổi trong trưởng thành, tức là họ không sửa đổi các đối số bạn truyền vào chúng. Điều này có một vài ưu điểm, một trong số chúng có thể sử dụng giá trị trả về của chúng trong các biểu thức không có tác dụng phụ.

Dưới đây là một wrapper chung bạn có thể sử dụng để bắt chước hành vi có thể thay đổi cho bất kỳ chức năng mà phải mất một đối số duy nhất:

function applyFn(&$s, $fn) 
{ 
    return $s = $fn($s); 
} 

applyFn($sourceElement['description'], 'htmlspecialchars_decode'); 

applyFn($sourceElement['description'], 'trim'); // trim string 

Mileage có thể thay đổi :)

+0

Rất tuyệt! Chỉ cần sợ tôi có thể gặp rắc rối với các hàm PHP đã có con trỏ ... có bất kỳ điều gì như vậy không? Được rồi, câu hỏi dư thừa, tôi đoán tôi chỉ có thể kiểm tra hướng dẫn sử dụng trước khi sử dụng chức năng này trên bất kỳ chức năng nào. –

+1

Có nên sử dụng cẩn thận :) –

Các vấn đề liên quan