1. 기본
변수 함수:
<?php $func = 'test'; function test(){ echo 'yes !'; } $func(); ?>
임의 함수:
<?php $newfunc = create_function('$a,$b', 'return $a.$b;'); echo "New anonymous function: $newfunc<br>"; echo $newfunc('just', 'coding'); ?>
create_function — 익명(lambda- style) function
익명 함수를 생성합니다. 이 함수는 unsort와 array_walk의 콜백 함수에서 주로 사용됩니다.
$a, $b는 매개변수이고, 'return $a, $b'는 함수의 코드입니다.
콜백 함수:
<?php //5.3 以前 $array = array( 'asbc', 'ddd', 'tttt', 'qqq'); array_walk($array,create_function('&$item','$item=strtoupper($item);') ); //function(&$itm){$itm = strtoupper($itm);} print_r($array); //5.3 以后 $array = array( 'asbc', 'ddd', 'tttt', 'qqq'); array_walk($array,function(&$itm){$itm = strtoupper($itm);}); print_r($array); ?>
array_walk(array,function,userdata...)
array_walk() 함수는 배열의 각 요소에 콜백 함수를 적용합니다. 성공하면 TRUE를 반환하고 그렇지 않으면 FALSE를 반환합니다.
일반적으로 함수는 두 개의 매개변수를 받습니다. 배열 매개변수의 값이 첫 번째로 사용되고, 키 이름이 두 번째로 사용됩니다. 선택적 매개변수 userdata가 제공되면 콜백 함수에 세 번째 매개변수로 전달됩니다.
2. 인스턴스는 클래스 함수를 동적으로 생성합니다.
<?php /* create class */ class Record { /* record information will be held in here */ private $info; /* constructor */ function Record($record_array) { $record_array['body'] = 'this is a new attribution'; $this->info = $record_array; } /* dynamic function server */ function __call($method,$arguments) { $meth = $this->from_case(substr($method,3,strlen($method)-3)); return array_key_exists($meth,$this->info) ? $this->info[$meth] : false; } function from_case($str) { $str[0] = strtolower($str[0]); $func = create_function('$c', 'return "_" . strtolower($c[1]);'); // function ($c) { return "_" . strtolower($c[1]); } return preg_replace_callback('/([A-Z])/', $func, $str); } } /* usage */ $Record = new Record( array( 'id' => 12, 'title' => 'Greatest Hits', 'description' => 'The greatest hits from the best band in the world!' ) ); /* proof it works! */ echo 'The ID is: '.$Record->getId().'<br>'; // returns 12 echo 'The Title is: '.$Record->getTitle().'<br>'; // returns "Greatest Hits" echo 'The Description is: '.$Record->getDescription().'<br>'; //returns "The greatest hits from the best band in the world!" echo 'The Body is: '.$Record->getBody(); //returns "The greatest hits from the best band in the world!" ?>
핵심 사항은 __call 및 create_function입니다