2012-07-31 5 views
6

Có thể viết mẫu mã NetBeans cho sử dụng tất cả đối số được khai báo trong tiêu đề của hàm (ví dụ: để gọi một hàm khác với các biến này) ? Số lượng các đối số có thể khác nhau, do đó, nó không có vẻ dễ dàng.Mẫu mã NetBeans để sử dụng tất cả đối số được khai báo trong tiêu đề của hàm

Ví dụ, đôi khi tôi muốn in ra tất cả đối số trong một hàm cho mục đích gỡ lỗi.


Dưới đây là một cách sử dụng ví dụ (gọi dsm() hàm này nhiều lần tùy thuộc vào số lượng các đối số):

function testModule_theme($existing, $type, $theme, $path) { 
    dsm($existing, '$existing in ' . __FUNCTION__ . '()'); 
    dsm($type, '$type in ' . __FUNCTION__ . '()'); 
    dsm($theme, '$theme in ' . __FUNCTION__ . '()'); 
    dsm($path, '$path in ' . __FUNCTION__ . '()'); 

    return array(
    // ...... 
); 
} 

Dưới đây là một số khác:

function testModule_block_view($delta = '') { 
    dsm($delta, '$delta in ' . __FUNCTION__ . '()'); 
    $block = array(); 
    // ..... 
    return $block; 
} 

Như bạn có thể thấy, có là 4 đối số trong trường hợp đầu tiên và chỉ có 1 đối số trong trường hợp thứ hai. Tên của các đối số cũng thay đổi tùy thuộc vào hàm đã cho.

Có một mẫu mã tôi đã viết cho sử dụng dsm() chức năng:

ddsm code template

dsm($$${VARIABLE newVarName default="variables"}, '$$${VARIABLE} in '.__FUNCTION__.'()'); 

cách này, tôi chỉ cần gõ ddsm, nhấn Tab, và sau đó tôi phải gõ chính xác tên của biến. Vì vậy, nó sẽ in ra như sau:

dsm($variables, '$variables in ' . __FUNCTION__ . '()'); 

Sau đó, tôi có thể thay đổi một phần variables, và gõ một tên khác, và cùng sẽ được sử dụng trong chuỗi. Một ví dụ:

Using ddsm code template

Nhưng tôi vẫn còn quá lạc hậu để gõ những thứ: D, và tôi tò mò nếu có một cách sử dụng tất cả các đối số của một hàm đưa ra khi sử dụng một template trong NetBeans.

Trả lời

2

Điều này thực sự có vẻ khó khăn. Nếu bạn biết bạn sẽ sử dụng các macro khi bạn khai báo các chức năng, bạn có thể sử dụng các mẫu như thế này:

// shortcut dsmfun1 
function ${FUNCTION_NAME}($$${PAR1}) { 
    dsm($$${PAR1}, '$$${PAR1} in ' . __FUNCTION__ . '()'); 

    ${selection}${cursor} 
} 

... 

// shortcut dsmfun4 
function ${FUNCTION_NAME}($$${PAR1}, $$${PAR2}, $$${PAR3}, $$${PAR4}) { 
    dsm($$${PAR1}, '$$${PAR1} in ' . __FUNCTION__ . '()'); 
    dsm($$${PAR2}, '$$${PAR2} in ' . __FUNCTION__ . '()'); 
    dsm($$${PAR3}, '$$${PAR3} in ' . __FUNCTION__ . '()'); 
    dsm($$${PAR4}, '$$${PAR4} in ' . __FUNCTION__ . '()'); 

    ${selection}${cursor} 
} 

Couple mẫu cung cấp cho bạn khai thực sự nhanh chóng và bạn phải gõ tên các thông số chỉ một lần.

Nếu bạn đang thêm các macro này sau, bạn có thể muốn xem this doc và triển khai hành vi mong muốn của bạn (mặc dù điều đó có thể khá phức tạp).

Hy vọng điều này sẽ hữu ích!

+0

+1, cảm ơn, đó là một ý tưởng rất tốt, nhưng điều đó sẽ có nghĩa là tôi phải tạo như nhiều mẫu mã cho các chức năng như nhiều lập luận tôi sẽ cần trong các chức năng này . Nhưng tôi sẽ nghĩ về nó! – Sk8erPeter

1

Tại sao bạn không chỉ sử dụng get_defined_vars() để chuyển tất cả chúng thành một lần? Bằng cách này, macro của bạn chỉ cần là một dòng tĩnh.

function dsm($func, array $args) 
{ 
    foreach ($args as $name => $value) { 
     echo "in $func, arg '$name' is $value\n"; 
    } 
} 

function testModule_theme($existing, $type, $theme, $path) { 
    dsm(__FUNCTION__, get_defined_vars()); 
} 

testModule_theme(1, 2, 3, 4); 

Output:

in testModule_theme, arg 'existing' is 1 
in testModule_theme, arg 'type' is 2 
in testModule_theme, arg 'theme' is 3 
in testModule_theme, arg 'path' is 4 
+0

+1, đây là một ý tưởng rất hay, nhưng tôi không luôn muốn in ra tất cả các biến, trong nhiều trường hợp, tôi muốn bình luận một hoặc hai trong số đó, đó là lý do tại sao tôi muốn "đặt trước" các dòng riêng biệt cho các nội dung gỡ lỗi này. (Nhân tiện, [dsm()] (http://api.drupal.org/api/devel/devel.module/function/dsm/7) là một hàm trong mô-đun Devel của Drupal.) – Sk8erPeter