2010-12-27 5 views
2

나는 ACL tut을 팔로우하고있었습니다. 이 코드 조각을 사용했습니다.은 클래스 속성 선언을 이해하는 데 도움이 필요합니다.

class ACL 
{ 
    var $perms = array(); 
    var $userID = 0; 
    var $userRoles = array(); 

    function __constructor($userID = '') 
    { 

    } 
} 

그러나 위의 선언 중 일부를 이해할 수 없습니다.

a) 클래스 속성은 위의 클래스에서 var 키워드로 시작하며 데이터 캡슐화에서는 속성 선언 전에 public, private 또는 protected 키워드를 사용할 필요가 없습니다. 위의 메서드는 PHP4 의미합니까? 아니면 php5에서도 작동할까요?

b) 내 IDE (패닉 코다). __construct를 생성자의 올바른 구문으로 사용합니다. 위 코드는 __constructor를 사용했습니다. 어느 것이 맞습니까? 내 지식이 PHP4에서 생성자 이름은 클래스 이름과 같아야합니다. 그렇다면 PHP5에서 __construct와 __constructor 중 하나와 같은 것인가요?

+0

'var'을 계속 사용할 수 있습니다. 그것은'public'과 같습니다. 그러므로 다시 작성하는 것은 무의미합니다. – mario

답변

7

가) var 키워드가 실제로 아마 PHP 4 호환성을위한 것입니다 감사합니다. var은 PHP 5의 public과 동일합니다. PHP 5에서도 작동하지만 PHP 4의 시간이 지나면 보니 public, privateprotected으로 이동하는 것이 안전합니다.

b) __construct 또는 PHP 4 호환 선언의 클래스 이름이 유일한 올바른 방법입니다. __constructor()은 생성자 메서드를 선언하지 않습니다.

+2

자습서 코드는 PHP/4 및 PHP/5 객체 지향 구문을 혼합합니다. 그런 종류의 리소스를 배우는 것으로 실격시킵니다. –

+0

pekka에 감사드립니다. 항상 내 구조에 있습니다. :) –

2

PHP4에서 모든 멤버와 메소드는 정적이며 공개입니다. var은 확실히 PHP4 구문입니다. PHP5에서는 public, privateprotected을 사용해야합니다.

__construct()는 생성자의 올바른 메서드 이름입니다. 클래스와 같은 이름을 가진 PHP 5.3 메소드는 더 이상 생성자로 취급되지 않으므로 단지 일반적인 메소드 일뿐입니다.

최신 튜토리얼을 확실히 찾아야합니다.

1

이 예제 클래스에는 PHP4와 PHP5가 혼합되어 있습니다.

  • 변수 선언은 PHP4 구문을 사용했으며 PHP5에서도 100 % 유효합니다.
    • PHP5에서는 멤버 변수를 private, public 또는 protected으로 선언 할 수 있습니다.
    • PHP5 함수도 private, public 또는 protected 일 수 있습니다.
    • 그러나 이러한 접근 자 유형은 PHP4와 호환되지 않습니다.
  • 클래스 생성자는 PHP5 구문을 사용했지만 PHP4와 호환되지 않습니다.

학습자이므로 PHP의 명명 규칙을 준수하고 클래스 이름을 사용하여 클래스를 포함하는 스크립트 파일의 이름을 지정하십시오. 동일한 스크립트 파일 내에서 둘 이상의 클래스를 사용하지 마십시오. 보안을 위해 모든 PHP 파일의 확장자는 .php이어야합니다.

클래스 내에 정적 메서드를 포함 할 수 있으며 (같은 클래스 내에 정적 메서드와 동적 메서드를 함께 사용하지 마십시오) Http::DoPost(...)과 같은 개체를 만들지 않고도 호출 할 수 있습니다. 그러나 $this은 정적 메서드 내에서 사용할 수 없습니다.

+0

명명 규칙에 대해 자세히 설명해 주시겠습니까? 어느 부분을 의미합니까? –

+0

변수 및 클래스 이름 규칙 (예 : 클래스 이름의 경우 Acl). $ userID 대신 $ userId를 사용할 수 있습니다. 또한 학습자 인 경우 모든 언어로 규칙을 코딩하는 데 익숙해졌습니다. –

관련 문제