C의 함수포인터 흉내내기 정보
PHP C의 함수포인터 흉내내기본문
<?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>
1
댓글 4개
근데, 한 가지 궁금한 게요... 아래처럼 출력 코드 사용하는 것과 뭔 차이인가요?
굳이 번거롭게 calc 함수를 더 만드는 이유가 궁금합니다.
echo plus(1, 2);
echo '<br />';
echo minus(1, 2);
echo '<br />';
echo multiply(1, 2);
echo '<br />';
echo division(1, 2);
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
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);