찾다
백엔드 개발PHP 튜토리얼PHP 클래스의 변수 및 멤버, 상속, 액세스 및 재정의 시 주의할 사항

  1. class Myclass{

  2. public $prop = 123;
  3. }
  4. $obj = new Myclass();

  5. ?>
코드 복사

클래스 멤버 속성(속성 이름은 "메소드"에 상대적임)에는 클래스 상수와 클래스 변수가 포함됩니다. 정의 시 클래스 상수는 비어 있을 수 없습니다. 클래스 속성에 정의 시 값이 할당되면 스칼라와 배열만 사용할 수 있습니다. 클래스 속성은 컴파일 타임에 초기화되고 PHP는 컴파일 타임에 표현식을 실행하지 않으므로 표현식이 될 수 없습니다.

1. 회원 액세스 제어 : public: 상속될 수 있으며 $obj->prop와 같은 클래스 메서드 외부에서 액세스할 수 있습니다. protected: 상속될 수 있지만 클래스 메서드 외부에서는 접근할 수 없습니다. private: 상속될 수 없으며 클래스 메서드 외부에서 액세스할 수 없습니다

PHP 4에서는 var를 사용하여 클래스 속성을 선언합니다. PHP5 이후에는 더 이상 사용되지 않습니다. PHP5.3 이전에는 경고가 표시됩니다. PHP5.3 이후에는 public 앞에 사용하거나 public의 별칭으로 단독으로 사용할 수 있습니다.

이 세 가지 액세스 제어 키워드는 생성자를 수정할 수도 있습니다. private 및 protected가 클래스의 생성자를 수정하는 경우 생성자를 호출하여 publice 정적 정적 메서드를 통해서만 객체를 인스턴스화할 수 있습니다. 왜냐하면 함수에서는 충분하기 때문입니다. 싱글톤 클래스 구현과 같이 클래스 외부에서 액세스할 수 없습니다.

  1. class Singleton {

  2. private static $instance=null;
  3. public $ k = 88;
  4. 비공개 함수 __construct(){
  5. }

  6. 공개 정적 함수 getInstance(){

  7. if( self::$instance==null){
  8. self::$instance = new self();
  9. }
  10. return self::$instance;

  11. }
  12. public function __clone(){ //복제 작업 척

  13. throw('싱글톤 클래스는 복제할 수 없습니다.');
  14. return self::getInstance();
  15. }
  16. }
  17. //new Singleton(); // 오류

  18. $in = Singleton::getInstance()
  19. ?> ;/p>
코드 복사

2. 상속 금지: 최종 키워드만 사용 수업이나 수업을 수정하는 방법

클래스가 final로 수정되면 이 클래스는 상속될 수 없습니다. 메소드가 final로 수정되면 이 메소드는 하위 클래스로 재정의될 수 없습니다.

  1. class Myclass{
  2. public $prop = 123;
  3. final public static function methodA(){// 상속 불가능한 공개 정적 메서드
  4. return '이것이 최종 메서드입니다';
  5. }
  6. }
  7. ?>
코드 복사

3. 추상 클래스 및 추상 메소드 : 추상 클래스는 클래스 및 메소드에만 사용되며 객체를 인스턴스화하는 데 직접 사용할 수 없으며 하위 클래스를 생성하는 데만 사용할 수 있습니다.

  1. 추상 클래스 Myclass{
  2. public $prop = 123;
  3. abstract public function methodA(); 추상 메서드는 함수 본문
  4. }
  5. ?>
코드 복사

4. 해당 액세스 : 클래스 상수는 액세스 제한 수정자를 사용할 수 없습니다. 이는 공개적이고 상속 가능하며 클래스 상수에 액세스하려면 이중 콜론::을 사용해야 합니다. 수업의 예를 들어보세요.

  1. class Myclass{

  2. public $prop = 123;
  3. const x = 999;
  4. public static function methodA(){

  5. return '이것은 최종 메소드입니다';
  6. }
  7. function getConst(){

  8. return self::x; //또는 $this::x;
  9. }
  10. }
  11. $instance = new Myclass() ;

  12. echo Myclass::x;

  13. echo $instance::x;
  14. echo $instance->getConst();
  15. ?>
코드 복사

클래스 상수는 값입니다. 상수 이름은 코드 컴파일 중에 해당 값으로 대체되며 런타임 중에는 수정할 수 없습니다. 따라서 클래스 상수는 클래스 자체와 관련되어 있으며 객체가 인스턴스화되기 전에 이미 존재합니다. 클래스의 상수는 클래스 이름을 사용하여 직접 액세스할 수 있습니다.

  1. class P{

  2. const m = 100;
  3. const n = self ::m;
  4. }
  5. class S 확장 P{

  6. const m=200;
  7. public function getPConst(){
  8. return parent::n ;
  9. }
  10. }
  11. $p = new P();

  12. $s = new S();
  13. echo $p::n; //100
  14. echo $s::n; //200 이 상수 이름은 상위 클래스에서 상속되며 컴파일 중에 self::m의 값으로 대체됩니다. self::m>가 사용됩니다. 클래스를 구별하는 방법으로 ;
  15. echo $s->getPConst() //100

  16. ?>
코드 복사

5. 정적 멤버 및 클래스 액세스

static은 클래스의 속성과 메서드를 수정할 수 있습니다. static으로 수정된 멤버는 클래스의 인스턴스가 아니라 클래스에 속합니다. 정적 멤버는 클래스 이름과 이중 콜론::을 사용하여 액세스해야 합니다. 따라서 정적 메서드 내에서는 인스턴스 자체를 가리키는 의사 변수 $this(또는 일반적으로 $this 포인터라고도 함)를 사용하는 것이 금지됩니다. 클래스 이름 대신 self 키워드를 사용할 수 있습니다. 클래스의 매직 상수 __CLASS__).

정적은 클래스 생성자를 수정하는 데 사용할 수 없으며 인터페이스에 선언된 메서드를 수정하는 데 사용할 수도 없습니다.

  1. class Myclass{

  2. public static $x = 99;
  3. 공용 함수 getX(){

  4. return self::$x;
  5. }
  6. }
  7. echo Myclass::x; /99

  8. ?>
코드 복사

정적 멤버는 액세스 제어 키워드로 수정이 가능하며 상속 및 재정의, 하위 클래스가 메서드를 재정의하지 않고 상위 클래스의 정적 메서드를 상속하는 경우 하위 클래스는 실제로 상위 클래스의 정적 메서드를 호출한다는 점에 유의해야 합니다. 정적 멤버 홀더는 개체가 아니라 클래스이므로 클래스의 여러 인스턴스가 동일한 정적 속성을 공유합니다. 한 인스턴스에서 정적 속성을 수정하면 다른 인스턴스의 정적 속성에 영향을 미칩니다.

  1. 클래스 A{

  2. a1 = 11;

  3. 공개 $a2 = 22;
  4. 공개 정적 함수 showStatic(){

  5. return self::$a1;
  6. }> ;
  7. 공용 함수 getStatic(){

  8. return self::$a1;
  9. }
  10. 공용 함수 getClassStatic(){

  11. $ className = get_called_class();
  12. return $className::$a1;
  13. }
  14. public function getProp(){

  15. return $this->a2;
  16. }
  17. }
  18. 클래스 B 확장 A{

  19. public static $a1 = 88;
  20. public $a2 = 99;
  21. }
  22. $obj1 = new A();

  23. $obj2 = new B();
  24. echo A::showStatic() / /11

  25. echo $obj1->getStatic(); //11
  26. echo $obj1->getClassStatic() //11
  27. echo $obj1->getProp() //22 ;/p>
  28. echo B::showStatic(); //11 상위 클래스의 메서드를 호출하고 상위 클래스의 정적 멤버에 액세스합니다

  29. echo $obj2->getStatic() ; / /11 상위 클래스의 메소드가 호출되고 메소드의 self는 정적 메소드를 보유하는 클래스를 가리킵니다.
  30. echo $obj2->getClassStatic() //88
  31. echo $obj2-> ;getProp() ; //99
  32. ?>
코드 복사

후기 정적 바인딩: 하위 클래스가 정적 속성을 재정의하고 상속된 메서드를 사용하여 상위 클래스의 정적 속성에 액세스하는 것을 방지하기 위해 PHP5.3에서는 정적 키워드를 사용하는 후기 정적 바인딩이라는 새로운 구문을 추가합니다. static이 get_called_class()에 의해 반환된 동일한 클래스, 즉 현재 정적 메서드를 호출하는 객체가 속한 클래스를 가리키도록 하는 키워드입니다. 이 키워드는 정적 메서드에 액세스하는 데에도 유효합니다.

  1. 공용 함수 getClassStatic(){

  2. $className = get_called_class()
  3. return $className::$a1;
  4. }
  5. //다음과 같이 쓸 수 있습니다:

  6. public function getClassStatic(){
  7. return static::$a1 ;
  8. }
  9. //정적 메서드에 사용됨

  10. //클래스 A:
  11. public static function testStatic(){
  12. echo "

    ";

  13. }
  14. 공용 함수 callStatic(){

  15. static::testStatic();
  16. } p>
  17. //클래스 B:

  18. public static function testStatic(){
  19. echo "

    testStatic of B

    ";
  20. }
  21. / /Class B는 클래스 A의 callStatic 메소드를 상속하며 해당 클래스의 testStatic 메소드에 올바르게 액세스할 수 있습니다.
  22. ?>
코드 복사

6. 클래스 또는 인스턴스 키워드 $this->propName $this는 클래스의 인스턴스를 가리킵니다. parent::xxx parent는 상위 클래스를 가리킵니다. 상위 클래스(parent::$xxx)의 정적 상수 및 정적 속성에 액세스할 수 있습니다. 메서드를 호출할 수 있습니다. 상위 클래스(정적 여부에 관계없이 개인 메소드일 수 없음) self::xxx self는 현재 호출된 메서드를 정의하는 클래스를 가리키며 정적 멤버 및 클래스 상수에 액세스하는 데 사용됩니다. static::xxx는 현재 메서드를 호출한 인스턴스를 인스턴스화한 클래스에 액세스하고 정적 멤버 및 피곤한 상수에 액세스하는 데 사용됩니다. 이 클래스와 self의 차이점은 정적 멤버에 액세스할 때 "후기 정적 바인딩"이 사용된다는 것입니다.

7. 클래스 상속 문제 다시 작성: 재정의된 멤버의 액세스 제어 수준은 줄일 수 없습니다. 예를 들어 public 멤버는 protected로 재정의될 수 없습니다. 비정적 멤버는 정적 멤버로 재정의될 수 없으며 정적 멤버는 비정적 멤버로 재정의될 수 없습니다.

8. 인터페이스에 정의된 메소드는 공개되어야 합니다. 클래스가 인터페이스 메서드를 구현할 때 이러한 메서드도 공개적이고 구체적으로 구현되어야 합니다(추상적일 수 없음). 인터페이스는 인터페이스 상수를 정의할 수도 있으며 사용법은 클래스 상수와 정확히 동일하지만 인터페이스는 함수가 아닌 멤버를 정의할 수 없습니다. 인터페이스는 서로 상속될 수 있습니다. 인터페이스의 상속은 쉼표로 구분된 다중 상속일 수 있습니다(하위 클래스와 상위 클래스의 상속은 단일 상속입니다). 클래스는 쉼표로 구분된 여러 인터페이스를 구현할 수 있습니다.

  1. 인터페이스 Ix는 Iy,Iz를 확장합니다{
  2. 공용 함수 a();
  3. }
  4. 클래스 A는 Iy,Iz를 구현합니다{
  5. .......
  6. }
  7. ?>
코드 복사

9. 유형 제약

PHP의 함수(또는 클래스 메소드)는 선언 시 매개변수의 유형을 제한할 수 있지만 배열 또는 객체(클래스/인터페이스)로만 제한할 수 있습니다. 문자열 유형으로 제한되면 PHP는 이를 제한되는 것으로 간주합니다. 문자열 클래스에.

유형이 인터페이스로 정규화된 경우 전달된 매개변수는 인터페이스를 구현하는 클래스의 인스턴스여야 합니다.

인터페이스 구현과 하위 클래스가 상위 클래스 메서드를 재정의하는 경우 정규화된 매개변수 유형을 수정할 수 없습니다.

메서드나 함수를 호출할 때 정규화된 매개변수 유형과 다른 데이터가 전달되면 오류가 보고되지만 null 매개변수는 허용될 수 있습니다.

  1. 인터페이스 Im{

  2. 공용 함수 a( classm $m);
  3. }
  4. class A Implements Im{

  5. public function a($x){ // 오류, 매개변수 $x는 인터페이스 정의와 일치하도록 classm 유형으로 제한되어야 합니다.
  6. var_dump ($x);
  7. }
  8. }
  9. ?>
코드 복사


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?Apr 17, 2025 am 12:25 AM

PHP 유형은 코드 품질과 가독성을 향상시키기위한 프롬프트입니다. 1) 스칼라 유형 팁 : PHP7.0이므로 int, float 등과 같은 기능 매개 변수에 기본 데이터 유형을 지정할 수 있습니다. 2) 반환 유형 프롬프트 : 기능 반환 값 유형의 일관성을 확인하십시오. 3) Union 유형 프롬프트 : PHP8.0이므로 기능 매개 변수 또는 반환 값에 여러 유형을 지정할 수 있습니다. 4) Nullable 유형 프롬프트 : NULL 값을 포함하고 널 값을 반환 할 수있는 기능을 포함 할 수 있습니다.

PHP는 객체 클로닝 (클론 키워드) 및 __clone 마법 방법을 어떻게 처리합니까?PHP는 객체 클로닝 (클론 키워드) 및 __clone 마법 방법을 어떻게 처리합니까?Apr 17, 2025 am 12:24 AM

PHP에서는 클론 키워드를 사용하여 객체 사본을 만들고 \ _ \ _ Clone Magic 메소드를 통해 클로닝 동작을 사용자 정의하십시오. 1. 복제 키워드를 사용하여 얕은 사본을 만들어 객체의 속성을 복제하지만 객체의 속성은 아닙니다. 2. \ _ \ _ 클론 방법은 얕은 복사 문제를 피하기 위해 중첩 된 물체를 깊이 복사 할 수 있습니다. 3. 복제의 순환 참조 및 성능 문제를 피하고 클로닝 작업을 최적화하여 효율성을 향상시키기 위해주의를 기울이십시오.

PHP vs. Python : 사용 사례 및 응용 프로그램PHP vs. Python : 사용 사례 및 응용 프로그램Apr 17, 2025 am 12:23 AM

PHP는 웹 개발 및 컨텐츠 관리 시스템에 적합하며 Python은 데이터 과학, 기계 학습 및 자동화 스크립트에 적합합니다. 1.PHP는 빠르고 확장 가능한 웹 사이트 및 응용 프로그램을 구축하는 데 잘 작동하며 WordPress와 같은 CMS에서 일반적으로 사용됩니다. 2. Python은 Numpy 및 Tensorflow와 같은 풍부한 라이브러리를 통해 데이터 과학 및 기계 학습 분야에서 뛰어난 공연을했습니다.

다른 HTTP 캐싱 헤더 (예 : 캐시 제어, ETAG, 최종 수정)를 설명하십시오.다른 HTTP 캐싱 헤더 (예 : 캐시 제어, ETAG, 최종 수정)를 설명하십시오.Apr 17, 2025 am 12:22 AM

HTTP 캐시 헤더의 주요 플레이어에는 캐시 제어, ETAG 및 최종 수정이 포함됩니다. 1. 캐시 제어는 캐싱 정책을 제어하는 ​​데 사용됩니다. 예 : 캐시 제어 : Max-AGE = 3600, 공개. 2. ETAG는 고유 식별자를 통해 리소스 변경을 확인합니다. 예 : ETAG : "686897696A7C876B7E". 3. Last-modified는 리소스의 마지막 수정 시간을 나타냅니다. 예 : 마지막으로 변형 : Wed, 21oct201507 : 28 : 00GMT.

PHP에서 보안 비밀번호 해싱을 설명하십시오 (예 : Password_hash, Password_Verify). 왜 MD5 또는 SHA1을 사용하지 않습니까?PHP에서 보안 비밀번호 해싱을 설명하십시오 (예 : Password_hash, Password_Verify). 왜 MD5 또는 SHA1을 사용하지 않습니까?Apr 17, 2025 am 12:06 AM

PHP에서 Password_hash 및 Password_Verify 기능을 사용하여 보안 비밀번호 해싱을 구현해야하며 MD5 또는 SHA1을 사용해서는 안됩니다. 1) Password_hash는 보안을 향상시키기 위해 소금 값이 포함 된 해시를 생성합니다. 2) Password_verify 암호를 확인하고 해시 값을 비교하여 보안을 보장합니다. 3) MD5 및 SHA1은 취약하고 소금 값이 부족하며 현대 암호 보안에는 적합하지 않습니다.

PHP : 서버 측 스크립팅 언어 소개PHP : 서버 측 스크립팅 언어 소개Apr 16, 2025 am 12:18 AM

PHP는 동적 웹 개발 및 서버 측 응용 프로그램에 사용되는 서버 측 스크립팅 언어입니다. 1.PHP는 편집이 필요하지 않으며 빠른 발전에 적합한 해석 된 언어입니다. 2. PHP 코드는 HTML에 포함되어 웹 페이지를 쉽게 개발할 수 있습니다. 3. PHP는 서버 측 로직을 처리하고 HTML 출력을 생성하며 사용자 상호 작용 및 데이터 처리를 지원합니다. 4. PHP는 데이터베이스와 상호 작용하고 프로세스 양식 제출 및 서버 측 작업을 실행할 수 있습니다.

PHP 및 웹 : 장기적인 영향 탐색PHP 및 웹 : 장기적인 영향 탐색Apr 16, 2025 am 12:17 AM

PHP는 지난 수십 년 동안 네트워크를 형성했으며 웹 개발에서 계속 중요한 역할을 할 것입니다. 1) PHP는 1994 년에 시작되었으며 MySQL과의 원활한 통합으로 인해 개발자에게 최초의 선택이되었습니다. 2) 핵심 기능에는 동적 컨텐츠 생성 및 데이터베이스와의 통합이 포함되며 웹 사이트를 실시간으로 업데이트하고 맞춤형 방식으로 표시 할 수 있습니다. 3) PHP의 광범위한 응용 및 생태계는 장기적인 영향을 미쳤지 만 버전 업데이트 및 보안 문제에 직면 해 있습니다. 4) PHP7의 출시와 같은 최근 몇 년간의 성능 향상을 통해 현대 언어와 경쟁 할 수 있습니다. 5) 앞으로 PHP는 컨테이너화 및 마이크로 서비스와 같은 새로운 도전을 다루어야하지만 유연성과 활발한 커뮤니티로 인해 적응력이 있습니다.

PHP를 사용하는 이유는 무엇입니까? 설명 된 장점과 혜택PHP를 사용하는 이유는 무엇입니까? 설명 된 장점과 혜택Apr 16, 2025 am 12:16 AM

PHP의 핵심 이점에는 학습 용이성, 강력한 웹 개발 지원, 풍부한 라이브러리 및 프레임 워크, 고성능 및 확장 성, 크로스 플랫폼 호환성 및 비용 효율성이 포함됩니다. 1) 배우고 사용하기 쉽고 초보자에게 적합합니다. 2) 웹 서버와 우수한 통합 및 여러 데이터베이스를 지원합니다. 3) Laravel과 같은 강력한 프레임 워크가 있습니다. 4) 최적화를 통해 고성능을 달성 할 수 있습니다. 5) 여러 운영 체제 지원; 6) 개발 비용을 줄이기위한 오픈 소스.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구