PHP에서 변수 대소문자 자동 수정

저는 현재 변수와 메서드에 대해 camelCase와 snake_case가 혼합된 PHP 프로젝트에서 작업하고 있습니다. 우리는 최근에 프로젝트에서 PHP-CS-Fixer을 사용하기 시작했는데 불행히도 이러한 종류의 변경을 수행하는 기존 규칙이 없었습니다. 그래서 변수 케이스 해결사를 직접 작성하기로 결정했습니다! 지금: 이것은 본질적으로 위험합니다. PHP의 인스턴스 변수는 $this->variableName 를 사용하여 호출됩니다. 이는 함수를 호출하는 방법과 매우 유사합니다. 그것들은 또한 private $variableName와 같은 생성자 위에 정의될 수 있으며 이는 이와 같은 수정자로 수정되지만 모든 호출 사이트는 그렇지 않습니다. 그래서 약간의 위험이 있습니다 😅. PHP에는 업데이트하고 싶지 않은 predefined variables도 있습니다. 좋아, 시작하자!

기존 프로젝트를 사용하고 있었기 때문에 각 파일을 가져오는 것에 대해 걱정할 필요가 없었고 PHP-CS-Fixer가 각 파일을 구문 분석하고 토큰을 가져오는 것을 신뢰할 수 있었습니다. 이것의 가장 어려운 부분은 실제로 토큰을 선택하는 방법을 알아내는 것이었습니다. 따라서 이 모든 작업은 토큰(코드의 가장 작은 블록)이 둘 중 하나variable types이고 미리 정의된 변수 목록에 없는지 확인하는 것입니다.

foreach ($tokens as $index => $token) {
  if ((T_VARIABLE === $token->getId()) || (T_STRING_VARNAME === $token->getId())) {
    if (in_array($token->getContent(), $predefinedVariables)) {
      continue;
    }
    $tokens[$index] = new Token([$token->getId(), $this->updateVariableCasing($token->getContent())]);
  }
}

그것은 실제로 그것의 대부분입니다! updateVariableCasing는 구성을 취한 다음 우리가 필요로 하는 모든 기능을 호출합니다(예: camelCase()configuration['case']와 같으면 camel_case 대소문자를 바꾸는 함수가 StackOverflow 어딘가에서 발견되었습니다. 전반적으로 이것은 매우 잘 작동합니다! 유일한 우리가 문제에 부딪힌 곳은 private 변수가 맨 위에 정의되어 거기에서 변환되었지만 코드에서 호출될 때 변환되지 않은 곳이었습니다( $this->variable_name ) 프로젝트에서 이와 같은 것을 구현하기로 결정했다면 염두에 두어야 할 사항 .

(PHP-CS-Fixer에 이 규칙을 추가하기 위한 PR)[ https://github.com/FriendsOfPHP/PHP-CS-Fixer/pull/5097 ]을 올렸지만 안전하지 않고 유지할 시간이 별로 없기 때문에 추가하기를 꺼려했다고 생각합니다. 들어가려고 합니다.


좋은 웹페이지 즐겨찾기