PHP 클래스 메서드의 주요 밑줄은 무엇입니까?




php:: (12)

그것은 객체 지향 PHP (PHP 4)의 나쁜 옛날부터입니다. 객체 지향 (OO) 구현은 매우 나쁘고 개인적인 방법 같은 것을 포함하지 않았다. 이를 보완하기 위해 PHP 개발자는 개인용으로 의도 된 메서드를 언더 스코어로 시작했습니다. 좀 더 오래된 클래스에서는 /**private*/ __foo() { 를 보게 될 것입니다.

나는 모든 메소드 앞에 언더 스코어를 붙이는 것에 대해 들어 본 적이 없으므로 그 원인을 설명 할 수는 없다.

다양한 PHP 라이브러리를 살펴보면서 많은 사람들이 일부 클래스 메소드 앞에 하나의 밑줄을 붙이기로 결정했습니다.

public function _foo()

...대신에...

public function foo()

궁극적으로 이것은 개인적인 취향에 달려 있다는 것을 알지만,이 습관이 어디에서 왔는지에 대한 통찰력이 있는지 궁금합니다.

내 생각에 클래스 메소드가 보호되거나 비공개로 표시되기 전에 PHP 4에서 이월 될 것입니다. "클래스 외부에서이 메서드를 호출하지 마십시오."는 의미입니다. 그러나 어쩌면 그것이 내가 익숙하지 않은 어딘가 (언어)에서 유래했거나 배후에 좋은 추론이있어 내가 알게되는 것이 유익하다는 생각이 들었다.

모든 생각, 통찰력 및 / 또는 의견을 주시면 감사하겠습니다.


Drupal (php CMS)에서 밑줄을 사용하여 후크가 호출되지 않도록 할 수 있습니다 ( https://api.drupal.org/api/drupal/includes!module.inc/group/hooks/7 ).

"my_module"이라는 모듈이 있고 함수 my_module_insert의 이름을 지정하려면 hook_insert 함수에 "hook"합니다. 이를 방지하기 위해 함수의 이름을 _my_module_insert로 바꿀 수 있습니다.

추오 훅은 Drupal에서 작동합니다. 실수로 후크를 구현하는 것이 가능합니다. 이것은 매우 나쁩니다.


선행 밑줄은 일반적으로 사유 재산 및 방법에 사용 됩니다. 필자가 일반적으로 사용하는 기술은 아니지만 일부 프로그래머에게 인기가 있습니다.


변수를 수정하지 않거나 클래스 외부에서 함수를 호출하지 않을 목적으로 만 밑줄을 사용합니다.

const 변수를 모두 대문자로 선언하면 변수의 이름을 보면 const 변수라고 추측 할 수 있습니다. 우리가 클래스 밖에서 수정하고 싶지 않은 변수와 마찬가지로, 우리는 우리 자신의 관례를 위해 밑줄로 선언한다.


드루팔 (Drupal) 및 밑줄 사용 :

일반적인 방법으로 밑줄은 함수가 아마 관련된 부모 함수에 의해서만 호출 될 것이라는 사실을 간단하게 표시하는 것입니다 ...

function mymodule_tool($sting="page title"){
    $out ='';
    //do stuff 
    $out  .= _mymodule_tool_decor($sting);
    return $out;
}

function _mymodule_tool_decor($sting){
    return '<h1>'.$string.'</h1>';
}

물론, 간단한 예제 만 ...


파이썬에서 변수에 밑줄을 붙이면 컴파일러가 실제 변수 이름 앞에 임의의 문자 및 숫자 시퀀스를 번역하게됩니다. 즉, 클래스 외부에서 변수에 액세스하려고하면 "variable undefined"오류가 발생합니다.

비록 이것이 여전히 파이썬에서 사용하는 관습인지는 모르지만


클래스 PHP에서 싱글 및 더블 밑줄 을 사용하는 간단한

class Name {

  /* Property */
  private $_name;

  /* Construct */
  function __construct($name) {
    $this->_setName($name);
  }

  /* Set */
  private function _setName($name) {
    $this->_name = $name;
  }

  /* Get */
  public function getName() {
    return $his->_name;
  }

}

나는 원래의 가정이 정확하다고 믿습니다. 일부 언어는 "객체"에 비공개로 유지되는 메서드 / 멤버 등에 밑줄을 접두어로 사용하는 것이 일반적입니다. 당신이 할 수 있더라도 말할 수있는 시각적 인 방법, 당신은 이것을 부르면 안된다!


젠드 프레임 워크가 PSR 일부이기 때문에 지금 PHP를위한 이러한 종류의 관례에 대한 가장 권위있는 소스가 PSR-2 : 코딩 스타일 가이드 일 것 입니다.

프로퍼티 이름은 보호 된 프라이빗 가시성 또는 프라이빗 가시성을 나타 내기 위해 하나의 밑줄이 붙어서는 안된다 (SHOULD NOT).


이제 2013 년에 이것은 PSR-2 코딩 가이드 라인에 의해 "공식적으로"나쁜 스타일입니다 .

속성 이름은 보호 된 또는 사적인 가시성을 나타 내기 위해 하나의 밑줄로 접두사를 사용해서는 안됩니다 (SHOULD NOT).

출처 : github.com/php-fig/fig-standards/blob/master/accepted/…


프라이빗 / 보호 된 메소드에 밑줄을 붙이는 것에 대해 강하게 반대했기 때문에 프라이빗 / 보호 된 키워드를 사용할 수 있고 IDE가이를 표시합니다.

그리고 나는 여전히 그래도 좋은 일이 될 수있는 한 가지 이유를 발견했습니다. public 메소드 addFoo() 있고 다른 메소드 addFooWhenBar() , addFooWhenBaz() ...와 공통 인 태스크의 일부분이 있다고 상상해보십시오. 이제는 일반적인 메소드의 가장 좋은 이름은 addFoo() 이지만 그것은 이미 취해진 것이므로 addFooInternal() 또는 addFooCommon() 또는 ...과 같은 추악한 이름을 생각해 내야합니다. 그러나 private 메소드는 가장 좋은 것으로 보입니다.


프라이빗 메소드를 위해 작성한 PHP 5 클래스의 첫 번째 밑줄을 사용합니다. 특정 클래스 멤버가 비공개 인 것은 개발자에게 작은 시각적 신호입니다. 이 유형의 힌팅은 공개 및 비공개 멤버를 구분하는 IDE를 사용할 때 유용하지 않습니다. 나는 C # days에서 그것을 집어 들었다. 오래 된 습관 ...





coding-style