PHP 개발 경험이 있는 프로그래머는 PHP에 내장된 기능이 많이 있다는 것을 잘 알고 있을 것입니다. PHP 개발을 할 때 더욱 잘 할 수 있도록 도와줄 것입니다. 본문에서는 개발에 꼭 필요한 8가지 PHP 기능을 모두 공유합니다. 모두 실용적입니다. PHP 개발자들께서 숙지해 주시기 바랍니다.
1.함수 파라미터 임의 수량 전달
우리가 .NET 또는 JAVA 프로그래밍에서 일반적으로 함수 파라미터의 개수는 고정되어 있지만, PHP는 당신이 임의의 개수의 파라미터를 사용할 수 있도록 한다.다음 예에서는 PHP 함수의 기본 인자를 보여 줍니다
// 두 개의 기본 매개 변수 함수
function foo($arg1 = ”, $arg2 = ”) {
echo “arg1: $arg1\n”;
echo “arg2: $arg2\n”;
}
foo(‘hello’,'world’);
/* 출력:
arg1: hello
arg2: world
*/
foo();
/* 출력:
arg1:
arg2:
*/
아래의 이 예는 PHP의 불확정 파라미터 용법으로, 사용하였다 [url=http://us2.php.net/manual/en/function.func-get-args.php]func_get_args()[/url]方法:
// 예, 형삼 목록이 비어 있습니다
function foo() {
// 모든 들어오는 인수의 배열 가져오기
$args = func_get_args();
foreach ($args as $k => $v) {
echo “arg”.($k+1).”: $v\n”;
}
}
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] => test.php
[4] => log.txt
[5] => test.txt
)
*/
경로를 추가할 수도 있습니다
$files = glob ('../images/a*.jpg');
print_r($files);
/* 출력:
어레이
(
[0] => ../images/apple.jpg
[1] => ../images/art.jpg
)
*/
절대 경로를 찾으려면 realpath() 함수를 호출할 수 있습니다
$files = glob(‘../images/a*.jpg’);
// applies the function to each array element
$files = array_map(‘realpath’,$files);
print_r($files);
/* output looks like:
Array
(
[0] => C:\wamp\www\images\apple.jpg
[1] => C:\wamp\www\images\art.jpg
)
*/
3. 메모리 사용량 정보 취득
PHP의 메모리 회수 메커니즘은 이미 매우 비상하다강력합니다. PHP 스크립트를 사용하여 현재 메모리 사용량, memory_get_usage() 함수 불러오기, 메모리 사용량 피크값 받기, memory_get_peak_usage() 함수 불러오기.참조 코드는 다음과 같습니다
echo"Initial:".memory_get_usage()" bytes\n";
/* 출력
Initial: 361400 bytes
*/
// 메모리 사용
for ($i = 0; $i < 100,000; $i++) {
$array []=md5($i);
}
// 메모리 절반 삭제
for ($i = 0; $i < 100,000; $i++) {
unset($array[$i]);
}
echo "Final: ".memory_get_usage()" bytes\n;
/* prints
파이널: 885912 bytes
*/
echo "Peak: ".memory_get_peak_usage()" bytes\n;
/* 출력 피크
Peak: 13687072 bytes
*/
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: 사용자 상태 시간 (micros)econds)
ru_utime.tv_sec: 사용자 상태 시간(seconds)
ru_stime.tv_usec: 시스템 커널 시간 (micro)세컨즈)
ru_stime.tv_sec: 시스템 커널 시간?(seconds)
당신의 스크립트가 얼마나 많은 CPU를 소비하는지 보려면 '사용자 상태의 시간'과'시스템 커널 시간' 값.초와 마이크로초 부분은 각각 제공되며, 마이크로초 값을 100으로 나눌 수 있습니다만, 이것을 초의 값에 추가하면 소수 부분을 얻을 수 있다.초수를 세다
// sleep for 3 seconds (non-busy)
sleep(3);
$data = getrusage();
echo “User time: “.
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000);
echo “System time: “.
($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000);
/* 출력
User time: 0.011552
System time: 0
*/
sleep은 시스템 시간을 차지하지 않습니다. 다음 예시를 살펴볼 수 있습니다
// loop 10 million times (busy)
for($i=0;$i<10000000;$i++) {
}
$data = getrusage();
echo “User time: “.
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000);
echo “System time: “.
($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000);
/*출력
User time: 1.424592
System time: 0.004204
*/
이는 약 14초의 CPU 시간이 걸렸고, 시스템이 호출하지 않아 거의 모든 시간이 사용자였다.
시스템 시간은 CPU가 시스템 호출에 소모하여 커널 명령을 수행하는 시간이다.다음은 일례
$start = microtime(true);
// keep calling microtime for about 3 seconds
while(microtime(true) – $start < 3) {
}
$data = getrusage();
echo “User time: “.
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000);
echo “System time: “.
($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000);
/* prints
User time: 1.088171
System time: 1.675315
*/
위의 예는 CPU 소모량이 더 많다는 것을 알 수 있다.
5. 시스템 상수 획득
PHP는 매우 유용한 시스템 상수를 제공한다.현재 줄 번호 가져오기( __ L)INE__), 파일(_FILE_), 디렉토리(_DIR_), 함수명(_FUNCTION_), 클래스명(_CLASS_), 메서드명(__METHOD_), 네임스페이스(_NAMESPACE_)입니다.
// this is relative to the loaded script’s path
// it may cause problems when running scripts from different directories
require_once(‘config/database.php’);
// this is always relative to this file’s path
// no matter where it was included from
require_once(dirname(__FILE__) . ‘/config/database.php’);
다음은 __ LINE_ 를 사용하여 debug 정보를 출력합니다. 이것은 프로그램을 디버깅하는 데 도움이 됩니다
// some code
// …
my_debug("some") debug message, _LINE__;
/* 출력
라인 4: some de버그 메시지
*/
// some more code
// …
my_debug("anoth")er debug message, _LINE__);
/* 출력
라인 11: 아노테r debug message
*/
function my_debug($msg, $line) {
echo "Line $line: $msg\n;
}
6,단일 아이디 생성
많은 친구들이 md5를 이용하고 있습니다.)는 하나의 번호를 생성하지만 md5( )는 몇 가지 단점이 있습니다. 1. 무질서하여 데이터베이스에서 정렬 성능이 저하됩니다.2. 너무 길어서 저장공간이 더 필요하다.사실 PHP에서는 하나의 함수를 가지고 하나의 id를 생성하는데, 이 함수가 바로 uniqid( )이다.다음은 일문일답
// generate unique string
echo uniqid(;)
/* 출력
4bd67c947233e
*/
// generate another unique sTring
echo uniqid(;)
/* 출력
4bd67c9472340
*/
이 알고리즘은 CPU 시간 스탬프를 기반으로 생성되므로, 비슷한 시간 동안 ID 상위 순위가 동일하며, 이는 ID의 정렬을 용이하게 한다. 중복을 피하려면 다음과 같이 ID 앞에 접두사를 붙이면 된다:
// 접두사
에쿠니qid('foo_');
/* 출력
foo_4bd67d6cd8b8f
*/
// 더 많은 엔트로피가 있다
에쿠니qid(', true)
/* 출력
4bd67d6cd8b926.12135106
*/
// 다 있다
에쿠니qid('bar_', true);
/* 출력
bar_4bd67da367b650.43684647
*/
7. 직렬화
PHP 직렬화 기능이 크다가정에서는 데이터를 데이터베이스나 파일에 저장해야 할 때, PHP의 serialize()와 unserialize() 방법을 사용하여 직렬화 및 역직렬화를 수행할 수 있습니다
// 복잡한 배열
$myvar = array(
'Hello'.
42,
array(1, 'two')),
'애플'
);
// 직렬화
$string = serialize($myvar);
echo$string;
/* 출력
a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:two;}i:3;s:5:애플”;}
*/
// 역순례화
$newvar = unserialize($string)
print_r($newv)ar)
/* 출력
어레이
(
[0] => 헬로
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)
[3] => 애플
)
*/
json_encode()와 json_decode() 함수를 사용하여 php5.2 이상의 버전을 사용하는 사용자는 json_encode()를 사용하여 json 형식의 직렬화를 수행할 수 있습니다
// a complex array
$myvar = array(
‘hello’,
42,
array(1,’two’),
‘apple’
);
// convert to a string
$string = json_encode($myvar);
echo $string;
/* prints
["hello",42,[1,"two"],”apple”]
*/
// you can reproduce the original variable
$newvar = json_decode($string);
print_r($newvar);
/* prints
Array
(
[0] => hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)
[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. Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Aliquam
pretium ullamcorper urna quis iaculis. Etiam ac massa
sed turpis tempor luctus. Curabitur sed nibh eu elit
mollis congue. Praesent ipsum diam, consectetur vitae
ornare a, aliquam a nunc. In id magna pellentesque
tellus posuere adipiscing. Sed non mi metus, at lacinia
augue. Sed magna nisi, ornare in mollis in, mollis
sed nunc. Etiam at justo in leo congue mollis.
Nullam in neque eget metus hendrerit scelerisque
eu non enim. Ut malesuada lacus eu nulla bibendum
id euismod urna sodales. “;
$compressed = gzcompress($string);
echo “Original size: “. strlen($string).”\n”;
/*출력 원본 크기
Original size: 800
*/
echo “Compressed size: “. strlen($compressed).”\n”;
/* 압축된 출력 크기
Compressed size: 418
*/
// 압축을 풀다
$original = gzuncompress($compressed);
거의 50%의 압축비율이 있다.또한 압축 알고리즘이 아닌 gzencode()와 gzdecode() 함수를 사용하여 압축할 수 있습니다.
지금까지 개발에 꼭 필요한 PHP 기능 8개를 모두 실용적이지 않았을까.
'개발 꿀팁 > PHP' 카테고리의 다른 글
laravel query builder 사용 하위 조회 (0) | 2022.08.04 |
---|---|
php에서 중국어 문자열을 어떻게 잘라내나요? (0) | 2022.08.03 |
PHP 인용자 & 용법 상세 분석 (0) | 2022.08.03 |
php 캐시 팁 (0) | 2022.08.03 |
PHP는 재귀적인 무한 등급 분류를 사용하지 않는다 (0) | 2022.08.02 |