2011-08-27 41 views
18

Tôi muốn để tự động đặt tên cho một vài chức năng sử dụng các biến, như thế này:Sử dụng một biến để xác định một hàm PHP

$thing = 'some_function'; 

function $thing() { 
    echo 'hi!'; 
} 

Tôi biết tôi có thể gọi một hàm sử dụng một biến như thế này:

$something = 'function_exists'; 

if($something('print_r')) { 
    echo 'Yep'; 
} 

Nhưng ví dụ trên không có tác dụng đối với tôi.

Bất kỳ ý tưởng nào?

Tôi đang sử dụng hệ thống có mô-đun. Mỗi mô-đun là một tập lệnh php duy nhất có thể được thêm hoặc lấy ra khỏi một thư mục cụ thể.

Mỗi mô-đun cần có hàm mới để khởi tạo. Tôi là glob'ing cho các tên tập tin, sau đó tôi muốn lặp và tạo ra một loạt các chức năng, một cho mỗi mô-đun.

Tôi đang sử dụng hệ thống hiện có và không thể ghi lại việc xử lý mô-đun.

Cách khác là viết tất cả các hàm init ra ngoài và mã hóa chúng, nhưng khi danh sách tăng lên thì mã - và nếu một mô-đun bị lấy đi thì các lỗi được ném ra.

+1

http://php.net/manual/en/function.call-user-func.php kiểm tra xem ra – Sleeperson

+0

Ngoại trừ việc này sẽ không hữu ích. Bạn thấy đấy, hàm đó là toàn bộ thời gian tĩnh - bạn không thể làm cho hàm hoạt động khác theo cách này. Dù chức năng này sẽ được đặt tên, chức năng này sẽ hành động theo cùng một cách này không có vấn đề gì. Nó giống như làm cho 'hello()' chức năng, ngoại trừ tên khác nhau tùy thuộc vào cách bạn thích người dùng: P. Với chức năng như vậy, bạn có thể truy cập bằng cách sử dụng '$ thing()', làm cho nó vô dụng. Chỉ cần đặt tên cho hàm bình thường. – xfix

+0

Có thể bạn có thể giải thích lý do tại sao bạn đang cố gắng tạo động các hàm tĩnh? Điều này dường như không phải là một ý tưởng hay, nói chung. Có thể, nếu bạn giải thích vấn đề bạn đang cố giải quyết, mọi người có thể đề nghị bạn giải pháp tốt hơn. –

Trả lời

18

Những gì bạn có thể làm là

$thing = 'some_function'; 
$$thing = function() { 
    echo 'hi'; 
}; 
$some_function(); 

Trong php < 5.3, bạn sẽ phải sử dụng create_function thay vì anonymous function:

// Use this in < 5.3 
$thing = 'some_function'; 
$$thing = create_function('', 
    'echo "hi";' 
); 
$some_function(); 

đó đang được nói, chức năng xác định với tên động là một ý tưởng tồi. Thay vào đó, hãy tạo một mảng các hàm bạn gọi vào hoặc sử dụng đa hình.

+1

súng nhanh nhất ở phía tây :) – Mick

+0

Tôi muốn hỗ trợ <5.3, nghĩa là create_function. Nhưng điều đó buộc tên hàm là "lambda_1", "lambda_2", v.v .. sau này tôi cần gọi các hàm này bằng một chuỗi cụ thể. – Mick

+0

@Mick No, 'create_function' không liên quan gì đến phần đặt tên. Thêm một ví dụ cho php <5.3 cho câu trả lời. Tại sao bạn không lưu trữ các chức năng trong một mảng? – phihag

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