슈

C의 함수포인터 흉내내기

· 2017-01-03 (화) 18:24:42 · 3699 · 4

<?php

function plus($a, $b) { 

return $a + $b;

}

 

function minus($a, $b) {

return $a - $b;

}

 

function multiply($a, $b) {

return $a * $b;;

}

 

function division($a, $b) {

return $a / $b;

} 

 

function calc($type, $a, $b) {

    return call_user_func($type, $a, $b);

}

  

echo calc('plus', 1, 2), '<br>';

echo calc('minus', 1, 2), '<br>';

echo calc('multiply', 1, 2), '<br>';

echo calc('division', 1, 2), '<p>';

?> 

 

<script>

// javascript  

function plus(a, b) {

return a + b;

}

 

function minus(a, b) {

return a - b;

}

 

function multiply(a, b) {

return a * b;

}

 

function division(a, b) {

return a / b;

}

  

function calc(type, a, b) {

    return type(a, b);

}

 

document.write( calc(plus, 1, 2) + '<br>' );

document.write( calc(minus, 1, 2) + '<br>' );

document.write( calc(multiply, 1, 2) + '<br>' );

document.write( calc(division, 1, 2) + '<br>' );

</script>

|

댓글 4개

슈와이 님, 좋은 팁 감사합니다.

근데, 한 가지 궁금한 게요... 아래처럼 출력 코드 사용하는 것과 뭔 차이인가요?
굳이 번거롭게 calc 함수를 더 만드는 이유가 궁금합니다.


echo plus(1, 2);
echo '<br />';
echo minus(1, 2);
echo '<br />';
echo multiply(1, 2);
echo '<br />';
echo division(1, 2);
// php
function main($type) {
$arr = array('test1', 'test2', 'test3');
echo '게시판입니다.';
$type($arr);
}

function latest1($arr) {
shuffle($arr);
foreach($arr as $v) {
echo "<h1>$v</h1>";
}
}

function latest2($arr) {
rsort($arr);
foreach($arr as $v) {
echo "<h3>$v</h3>";
}
}

echo main('latest1');
echo '<br>';
echo main('latest2');
?>

// javascript
<form name="f">
<input type="text" name="a" value="1">
<input type="text" name="op" value="+">
<input type="text" name="b" value="2"> =
<input type="text" name="c" value="">
<input type="button" onclick="main(this.form)" value="계산" >
</form>

<script>
function plus(a, b) {
return a + b;
}

function minus(a, b) {
return a - b;
}

function multiply(a, b) {
return a * b;
}

function division(a, b) {
return a / b;
}

function calc(type, a, b) {
return type(a, b);
}


function main(f) {
var func = null;
switch(f.op.value) {
case '+':
func = plus;
break;
case '-':
func = minus;
break;
case '*':
func = multiplylus;
break;
case '/':
func = division;
break;
}

f.c.value = calc(func, Number(f.a.value), Number(f.b.value));
}


요약
main함수를 자동차로 보자면 함수포인터에 사용되는 함수는
차의 부품으로 보고 필요할때 부품만 교체한다는 개념으로 이해하시면
될거 같습니다.


관련 사이트
http://www.joinc.co.kr/w/Site/C/Documents/FunctionPointer
http://norux.me/8
이제 좀 이해가 되네요.ㅎ 자세히 설명해주셔서 감사합니다.
[http://blog-imgs-44.fc2.com/w/a/r/wareureu/227.gif]
2017-01-09 (월) 22:47:22
echo call_user_func('plus', 1, 2);
echo '<br />';
echo call_user_func('minus', 1, 2);
echo '<br />';
echo call_user_func('multiply', 1, 2);
echo '<br />';
echo call_user_func('division', 1, 2);
댓글을 작성하시려면 로그인이 필요합니다.

개발자팁

5,403건

개발과 관련된 유용한 정보를 공유하세요. 질문은 QA에서 해주시기 바랍니다.

+
분류 제목 글쓴이 날짜 조회
PHP 16-11-28 조회 3,863
PHP 16-11-28 조회 2,433
PHP 16-11-28 조회 2,734
OS 16-11-27 조회 3,337
PHP 16-11-25 조회 4,599
PHP 16-11-25 조회 5,755
PHP 16-11-24 조회 2,921
PHP 16-11-24 조회 2,489
PHP 16-11-24 조회 2,602
PHP 16-11-23 조회 2,775
PHP 16-11-23 조회 2,314
PHP 16-11-23 조회 2,682
PHP 16-11-22 조회 2,899
PHP 16-11-22 조회 2,978
PHP 16-11-22 조회 2,195
PHP 16-11-21 조회 2,926
PHP 16-11-21 조회 3,046
PHP 16-11-21 조회 2,827
OS 16-11-21 조회 2,568
OS 16-11-21 조회 4,815
OS 16-11-20 조회 4,226
PHP 16-11-19 조회 4,176
OS 16-11-19 조회 4,335
PHP 16-11-18 조회 2,630
PHP 16-11-18 조회 2,613
PHP 16-11-18 조회 5,767
PHP 16-11-17 조회 2,849
PHP 16-11-17 조회 2,776
PHP 16-11-17 조회 2,722
OS 16-11-17 조회 4,279