최근 프로젝트에서는 Symfony 프레임워크를 사용합니다. 이 프레임워크는 ORM을 사용하여 이 팀에서 데이터베이스를 운영합니다. 솔직히 말해서 ORM을 사용하는 것의 개발 효율성과 운영 효율성은 엔터티 명명 및 기존 명명에 있어서 반드시 훨씬 높지는 않습니다. 데이터베이스 필드의 수가 다릅니다. ORM 엔터티 속성 이름 지정은 카멜 표기법이며 데이터베이스 필드는 밑줄로 구분되어 필드 매핑 프로세스를 생성합니다. 엔터티에 필요한 배열을 수동으로 작성해야 하는 경우 필드 매핑은 골치 아픈 일입니다. 특히 필드가 많은 경우 토하고 싶을 것입니다. 이 시점에서 문제가 발생합니다. 밑줄로 구분된 명명된 필드를 CamelCase 명명으로 변환하는 것입니다. 저는 또한 매우 게으릅니다. 오랫동안 온라인으로 검색한 결과 특정 PHP 데모를 찾을 수 없었습니다. 그 중 일부는 Java로도 작성되었으며 매우 복잡합니다. 그래서 저는 혼자서 음식과 옷을 충분히 만들고 그 중 두 개를 썼습니다.
<?php //微妙时间 function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } //将下划线命名转换为驼峰式命名 function convertUnderline1 ( $str , $ucfirst = true) { while(($pos = strpos($str , '_'))!==false) $str = substr($str , 0 , $pos).ucfirst(substr($str , $pos+1)); return $ucfirst ? ucfirst($str) : $str; } //将下划线命名转换为驼峰式命名 function convertUnderline2 ( $str , $ucfirst = true) { $str = explode('_' , $str); foreach($str as $key=>$val) $str[$key] = ucfirst($val); if(!$ucfirst) $str[0] = strtolower($str[0]); return implode('' , $str); } //第一种方式调用10w次所需时间 $s1 = microtime_float(); for ($i=0;$i<1000;$i++) { $str= 'abcd_efgh_igk_lmn'; convertUnderline1($str); } $e1 = microtime_float(); echo 'convertUnderline1: run time = '; echo $e1-$s1;echo '<br />'; //第二种方式调用10w次所需时间 $s2 = microtime_float(); for ($i=0;$i<1000;$i++) { $str= 'abcd_efgh_igk_lmn'; convertUnderline2($str); } $e2 = microtime_float(); echo 'convertUnderline2: run time = '; echo $e2-$s2;
왜 두 개를 써야 할까요? 두 가지 처리 방법이 있는데 어느 것이 더 효율적인지 알고 싶습니다.
테스트 결과 문자열 접합 방식이 배열 처리보다 0.1초 느린 것으로 나타났습니다. 물론 이는 각 함수를 10만 번 실행한 후에만 알 수 있는 결과입니다. 물론 차이도 있을 수 있습니다. 10,000번은 무시해도 됩니다.
테스트 결과는 다음과 같습니다.
1K회 실행:
convertUnderline1: run time = 0.0050010681152344
convertUnderline2: run time = 0.0039999485015869
1w회 실행:
con vertUnderline1: 런타임 = 0.05500602722168
convertUnderline2: 런타임 = 0.036003828048706
10주 실행:
convertUnderline1: 런타임 = 0.46304702758789
convertUnderline2: 런타임 = 0.3190 3195381165
왜 문자열인가요? 차단 및 접합 배열 연결보다 느립니까? PHP C의 맨 아래 레이어를 본 적이 있다면 이해할 것입니다. 따라서 앞으로는 하나의 문자열로 연결해야 할 문자열이 많은 경우에는 점 연결을 사용하지 말고 배열에 넣고 내파 연결을 사용하세요.
한 가지 더 말씀드릴 점은 이 방법은 JS에서도 사용된다는 점입니다. 문자열 연결 블록보다 배열 연결이 더 좋습니다.
위 내용은 PHP를 사용하여 밑줄로 구분된 명명된 문자열을 카멜 케이스 명명 방법으로 변환하는 방법, 밑줄 뒤의 첫 글자를 대문자로 변경하는 방법 등을 소개한 내용으로, 다음과 같은 내용이 PHP에 관심이 있는 친구들에게 도움이 되기를 바랍니다. 튜토리얼.