클래스 - php::




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

다양한 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에서 작동합니다. 실수로 후크를 구현하는 것이 가능합니다. 이것은 매우 나쁩니다.


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

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


나는 같은 대답을 찾고 있었고, 약간의 연구를했고, PHP 프레임 워크가 다른 스타일을 제안한다는 것을 발견했습니다 :

코드 점화기

공식 매뉴얼에는 이러한 연습을 장려 하는 코딩 스타일 섹션이 있습니다 .

사설 방법 및 변수

공용 메서드가 코드 추상화에 사용하는 유틸리티 및 도우미 함수와 같이 내부적으로 만 액세스되는 메서드 및 변수에는 밑줄이 붙어야합니다.

public function convert_text()

private function _convert_text()

다른 프레임 워크는

Cakephp :

같은 일을한다 .

회원 공개 상태

메소드와 변수에 PHP5의 개인 키워드와 보호 된 키워드를 사용하십시오. 또한 비공개 메서드 나 변수 이름은 밑줄 (_)로 시작합니다. 예:

class A
{
    protected $_iAmAProtectedVariable;

    protected function _iAmAProtectedMethod()
    {
       /* ... */
    }

    private $_iAmAPrivateVariable;

    private function _iAmAPrivateMethod()
    {
        /* ... */
    }
}

그리고 또한

같은 일을한다 .

개인 클래스 멤버 앞에는 하나의 밑줄이옵니다. 예 :

$_status    _sort()     _initTree()

동안

드루팔

코드 스타일 은 이에 대해 특별히 경고합니다 .

  1. 보호 된 속성이나 개인 속성 및 메서드는 밑줄 접두사를 사용하면 안됩니다.

교향곡

다른 한편으로, declares :

Symfony는 PSR-0, PSR-1, PSR-2 및 PSR-4 문서에 정의 된 표준을 따릅니다.


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


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

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


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


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

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


클래스 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;
  }

}

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

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


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





coding-style