PHP 개발을 해본 프로그래머는 PHP에 내장된 함수가 많다는 것을 알아야 합니다. 이를 익히면 PHP 개발에 더욱 익숙해질 수 있습니다. 이 기사에서는 개발에 필요한 8가지 필수 PHP 함수를 공유합니다. 모두 매우 실용적이며 모든 PHP 개발자가 이를 마스터할 수 있기를 바랍니다.
1. 임의 개수의 함수 매개변수 전달
.NET 또는 JAVA 프로그래밍에서는 일반적으로 함수 매개변수의 개수가 고정되어 있지만 PHP에서는 임의 개수의 매개변수를 사용할 수 있습니다. 다음 예에서는 PHP 함수의 기본 매개변수를 보여줍니다.
// 두 개의 기본 매개변수가 있는 함수
function foo($arg1 = ”, $arg2 = ”) {
echo “arg1 : $arg1n";
echo "arg2: $arg2n";
}
foo('hello','world');
/* 출력:
arg1: hello
arg2 : world
*/
foo();
/* 출력:
arg1:
arg2:
*/
다음 예는 PHP에서 변수 매개변수를 사용하는 예입니다. , func_get_args() 메서드를 사용합니다:
// 예, 형식 매개변수 목록은 비어 있습니다.
function foo() {
// 들어오는 모든 매개변수의 배열을 가져옵니다.
$args = func_get_args( );
foreach ($args as $k => $v) {
echo “arg”.($k+1).”: $vn”
}
}
foo();/* 아무것도 출력되지 않습니다*/
foo('hello')
/* 출력
arg1: hello
*/
foo('hello' ', 'world', 'again');
/* 출력
arg1: hello
arg2: world
arg3: again
*/
2 , glob()을 사용하여 파일 찾기
대부분의 PHP 함수의 함수 이름은 문자 그대로 그 목적을 이해할 수 있지만, glob()을 보면 실제로 무엇을 위해 사용되는지 알 수 없습니다. glob()은 scandir()과 동일하며 파일을 찾는 데 사용할 수 있습니다. 다음 사용법을 참조하세요.
// 접미사 PHP가 있는 모든 파일 가져오기
$files = glob(' *. php');
print_r($files);
/* 출력:
배열
(
[0] => phptest.php
[1] => pi .php
[2] => post_output.php
[3] => test.php
)
*/
여러 접미사를 검색할 수도 있습니다:
// PHP 파일 및 TXT 파일 가져오기
$files = glob('*.{php,txt}', GLOB_BRACE)
print_r($files)/* 출력:
배열
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] = > 테스트. php
[4] => log.txt
[5] => test.txt
)
*/
경로를 추가할 수도 있습니다:
$files = glob('../images/a*.jpg');
print_r($files)
/* 출력:
배열
(
[ 0] => ../images/apple.jpg
[1] => ../images/art.jpg
)
*/
절대적인 결과를 얻고 싶다면 path, realpath() 함수를 호출할 수 있습니다:
$files = glob('../images/a*.jpg')
// 각 배열 요소에 함수를 적용합니다.
$files = array_map('realpath',$files);
print_r($files);
/* 출력은 다음과 같습니다:
배열
(
[0] => C :wampwwwimagesapple.jpg
[1] => C:wampwwwimagesart.jpg
)
*/
3. 메모리 사용량 정보 가져오기
PHP의 메모리 재활용 메커니즘 또한 PHP 스크립트를 사용하여 현재 메모리 사용량을 가져오고, memory_get_usage() 함수를 호출하여 현재 메모리 사용량을 가져오고, memory_get_peak_usage() 함수를 호출하여 최대 메모리 사용량을 가져올 수도 있습니다. 참조 코드는 다음과 같습니다.
echo “초기: “.memory_get_usage().” 바이트 n”
/* 출력
초기: 361400바이트
*/
// 메모리 사용
for ($i = 0; $i $array []= md5($i);
} // 메모리 절반 삭제
for ($i = 0; $i unset($array[$i])
} echo "최종: ".memory_get_usage() 바이트" ;
/*
최종: 885912바이트
*/
echo “Peak: “.memory_get_peak_usage().” 바이트 n” 출력
Peak: 13687072바이트
*/
4. CPU 사용량 정보 얻기
메모리 사용량을 얻은 후 PHP의 getrusage()를 사용하여 CPU 사용량을 얻을 수도 있습니다. Windows에서.
print_r(getrusage());
/* 출력
배열
(
[ru_oublock] => 0
[ru_inblock] => 0
[ru_msgsnd ] => 2
[ru_msgrcv] => 3
[ru_maxrss] => 12692
[ru_ixrss] => 764
[ru_idrss] => 3864
[ru_minflt] => 94
[ru_majflt] => 0
[ru_nsignals] => 1
[ru_nvcsw] => 67
[ru_nivcsw] => 4
[ru_nswap] => 0
[ru_utime.tv_usec] => 0
[ru_utime.tv_sec] => 0
[ru_stime.tv_usec] => 6269
[ru_stime.tv_sec] => 0
)
*/
이 구조는 CPU를 잘 알지 않는 이상 매우 모호해 보입니다. 다음은 몇 가지 설명입니다.
ru_oublock: 출력 작업 차단
ru_inblock: 입력 작업 차단
ru_msgsnd: 보낸 메시지
ru_msgrcv: 받은 메시지
ru_maxrss: 최대 상주 세트 크기
ru_ixrss: 합계 공유 메모리 크기
ru_idrss: 총 비공유 메모리 크기
ru_minflt: 페이지 재활용
ru_majflt: 페이지 무효화
ru_nsignals: 수신된 신호
ru_nvcsw: 활성 컨텍스트 전환
ru_nivcsw: 수동 컨텍스트 스위칭
ru_nswap: 스왑 영역
ru_utime.tv_usec: 사용자 모드 시간(마이크로초)
ru_utime.tv_sec: 사용자 모드 시간(초)
ru_stime.tv_usec: 시스템 커널 시간(마이크로초) )
ru_stime.tv_sec: 시스템 커널 시간(초)
스크립트가 얼마나 많은 CPU를 소비하는지 확인하려면 "사용자 모드 시간" 및 "시스템 커널 시간" 값을 살펴봐야 합니다. 초와 마이크로초 부분은 별도로 제공됩니다. 마이크로초 값을 100만으로 나누어 초 값에 더하면 소수 부분으로 초 수를 구할 수 있습니다.
// 3초간 절전 모드(바쁨 없음)
sleep(3)
$data = getrusage()
echo “사용자 시간: “. $data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] /
echo "시스템 시간: ".
($data['ru_stime.tv_sec' ] +
$data['ru_stime.tv_usec'] / 1000000);
/* 출력
사용자 시간: 0.011552
시스템 시간: 0
*/
수면이 점유되지 않습니다. 시간이 지나면 다음 예를 볼 수 있습니다.
// 천만 번 반복(사용 중)
for($i=0;$i } $data = getrusage();
echo “사용자 시간: “.
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000) ; >echo “시스템 시간: “.
($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000)
/* 출력
사용자 시간: 1.424592
시스템 시간: 0.004204
*/
이 작업에는 약 14초의 CPU 시간이 소요되었으며, 시스템 호출이 없었기 때문에 거의 모두 사용자 시간이었습니다.
시스템 시간은 CPU가 시스템 호출 시 커널 명령을 실행하는 데 소비한 시간입니다. 예는 다음과 같습니다.
$start = microtime(true);
// 약 3초 동안 계속해서 microtime 호출
while(microtime(true) – $start }
$data = getrusage(); echo “사용자 시간: “.
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] /
echo “시스템 시간: “.
($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000)
/* 인쇄
1.088171
시스템 시간: 1.675315
*/
위의 예에서는 더 많은 CPU를 소비하는 것을 볼 수 있습니다.
5. 시스템 상수 가져오기
PHP는 현재 줄 번호(__LINE__), 파일(__FILE__), 디렉터리
(__DIR__), 함수를 가져올 수 있는 매우 유용한 시스템 상수를 제공합니다. 이름(__FUNCTION__), 클래스 이름(__CLASS__), 메서드 이름(__METHOD__) 및 네임스페이스
(__NAMESPACE__)는 C 언어와 유사합니다.
이런 것들은 주로 디버깅에 사용된다고 생각할 수 있지만 반드시 그런 것은 아닙니다. 예를 들어 다른 파일을 포함할 때는 다음과 같이 ?__FILE__을 사용할 수 있습니다(물론 PHP 5.3 이후에는 __DIR__을 사용할 수도 있습니다). 예입니다.
// 이는 로드된 스크립트의 경로에 상대적입니다
// 다른 디렉터리에서 스크립트를 실행할 때 문제가 발생할 수 있습니다
require_once('config/database.php')
// 이는 항상 이 파일의 경로에 상대적입니다.
//
require_once(dirname(__FILE__) . '/config/database.php')에서 포함된 위치에 관계없이
다음이 사용됩니다_ _LINE__은 프로그램 디버깅에 도움이 되는 일부 디버그 정보를 출력합니다.
// some code
// …
my_debug(“some debug message”, __LINE__)/* Output
4번째 줄: 일부 디버그 메시지
*/
// 추가 코드
// …
my_debug(“다른 디버그 메시지”, __LINE__)
/* 출력
줄 11: 또 다른 디버그 메시지
*/
function my_debug($msg, $line) {
echo “Line $line: $msgn”
}
6. 아이디
많은 친구들이 md5()를 사용하여 고유한 숫자를 생성하지만 md5()에는 몇 가지 단점이 있습니다. 1. 혼란으로 인해 데이터베이스의 정렬 성능이 저하됩니다. 2. 너무 길어서 더 많은 저장 공간이 필요합니다. 실제로 PHP에는 고유 ID를 생성하는 함수가 있습니다. 이 함수는 uniqid()입니다. 사용법은 다음과 같습니다.
// 고유 문자열 생성
echo uniqid()
/* 출력
4bd67c947233e
*/
// 다른 고유 문자열 생성
echo uniqid();
/* 출력
4bd67c9472340
*/
이 알고리즘은 CPU 타임스탬프를 기준으로 생성되므로 비슷한 기간에 마찬가지로 ID 정렬도 용이해집니다. 중복을 더 잘 피하려면 다음과 같이 ID 앞에 접두사를 추가할 수 있습니다.
// Prefix
echo uniqid('foo_');
/ * 출력
foo_4bd67d6cd8b8f
*/
// 엔트로피가 더 많습니다
echo uniqid(”,true)
/* 출력
4bd67d6cd8b926.12135106
* /
// 둘 다
echo uniqid('bar_',true);
/* 출력
bar_4bd67da367b650.43684647
*/
7.
PHP 직렬화 기능을 점점 더 일반적으로 사용할 수 있습니다. 데이터를 데이터베이스나 파일에 저장해야 하는 경우 PHP에서 serialize() 및 unserialize() 메서드를 사용하여 코드 직렬화를 수행할 수 있습니다.
// 복잡한 배열
$myvar = array(
'hello',
42,
array(1,'two '),
'사과'
);
// 직렬화
$string = serialize($myvar)
echo $string; i:0;s:5:”안녕하세요”;i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:” 2";} i:3;s:5:"apple";}
*/
//역직렬화
$newvar = unserialize($string);
print_r($newvar )
/* 출력
배열
(
[0] => hello
[1] => 42
[2] => 배열
(
[0] => 1
[1] => two
)
[3] => apple
)
*/
걱정하지 마세요. PHP는 어떻게 직렬화하나요? PHP 5.2 이상을 사용하는 사용자는 json_encode() 및 json_decode() 함수를 사용하여 json 형식을 직렬화할 수 있습니다.
// 복잡한 배열
$myvar = array(
'hello',
42,
array(1,'two'),
'apple'
)/ / 문자열로 변환
$string = json_encode($myvar);
echo $string;
/* 인쇄
["hello",42,[1,"two"],"apple ”]
*/
// 원래 변수를 재현할 수 있습니다
$newvar = json_decode($string)
print_r($newvar)
/* 인쇄
배열
(
[0] => 안녕하세요
[1] => 42
[2] => 배열
(
[0] => 1
[1] = > 2
)
[3] => apple
)
*/
8. 문자열 압축
압축에 관해 이야기할 때 실제로는 파일 압축을 생각할 수도 있습니다. , 문자열을 압축할 수도 있습니다. PHP는 gzcompress() 및 gzuncompress() 함수를 제공합니다.
$string =
"Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Nunc ut elit id mi ultricies
adipiscing. Nulla facilisi. Praesent pulvinar ,
sapien vel feugiat Vestibulum, nulla dui pretium orci,
non ultricies elit lacus quis ante.
sit amet, consectetur adipiscing elit
sed turpis tempor luctus. eu elit
mollis metus, at lacinia
Sed magna nisi, ornare in mollis
sed nunc. at justo in leo congue mollis
id euismod urna 소달레스 ";
$compressed = gzcompress($string);
echo "원본 크기: ".strlen($string)."n";
/* 출력 원본 크기
원본 크기: 800
*/
echo “압축 크기: “.strlen($compressed).”n”
/* 출력 압축 크기
압축 크기: 418
*/
// 압축 해제
$original = gzuncompress($compressed)
압축률이 거의 50%입니다. 동시에, 다른 압축 알고리즘을 사용하여 gzencode() 및 gzdecode() 함수를 사용하여 압축할 수도 있습니다.
위의 8가지 PHP 개발 필수 기능은 모두 실용적인가요?