>백엔드 개발 >PHP 튜토리얼 >PHP, 클래스 및 객체

PHP, 클래스 및 객체

Barbara Streisand
Barbara Streisand원래의
2024-12-29 14:42:11880검색

PHP, Classes and Objects

PHP의 클래스와 객체

PHP는 Java와 마찬가지로 객체 지향 프로그래밍을 지원하며 클래스와 객체를 핵심 구성 요소로 사용합니다. 이러한 개념을 이해하는 것은 PHP를 마스터하는 데 필수적입니다. 이 가이드는 PHP의 클래스와 객체에 대해 알아야 할 모든 것을 다룹니다.

클래스 정의

PHP의 클래스는 객체 생성을 위한 청사진입니다. 클래스의 객체가 가질 구조와 동작을 정의합니다.

통사론

class ClassName {
    // Properties (Fields)
    // Methods
}

class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

객체 생성

객체는 클래스의 인스턴스입니다. new 키워드를 사용하여 클래스에서 객체를 생성합니다.

통사론

$objectName = new ClassName();

class Main {
    public function run() {
        $myCar = new Car(); // Creating an object of the Car class
        $myCar->color = "Red";
        $myCar->model = "Tesla";
        $myCar->year = 2022;
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();

속성 및 방법

속성(필드라고도 함)은 개체의 상태를 나타내고, 메서드는 개체의 동작을 정의합니다.

속성

속성은 개체의 데이터를 보유하는 변수입니다.

class Car {
    public $color;
    public $model;
    public $year;
}

행동 양식

메서드는 객체의 동작을 설명하는 클래스 내에 정의된 함수입니다.

class Car {
    public $color;
    public $model;
    public $year;

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

생성자

생성자는 객체가 인스턴스화될 때 자동으로 호출되는 특수 메서드입니다. 새로 생성된 개체를 초기화합니다.

기본 생성자

생성자가 정의되지 않은 경우 PHP는 인수가 없는 기본 생성자를 제공합니다.

class Car {
    public $color;
    public $model;
    public $year;

    // Default constructor
    public function __construct() {
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

매개변수화된 생성자

매개변수화된 생성자를 사용하면 특정 값으로 개체를 초기화할 수 있습니다.

class Car {
    public $color;
    public $model;
    public $year;

    // Parameterized constructor
    public function __construct($color, $model, $year) {
        $this->color = $color;
        $this->model = $model;
        $this->year = $year;
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

매개변수화된 생성자 사용

class Main {
    public function run() {
        $myCar = new Car("Red", "Tesla", 2022);
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();

생성자 오버로딩

PHP는 기본적으로 Java와 같은 메소드 오버로딩을 지원하지 않지만 선택적 매개변수를 사용하거나 단일 생성자 내에서 수동으로 인수를 처리하여 이를 시뮬레이션할 수 있습니다.

class Car {
    public $color;
    public $model;
    public $year;

    // Simulating constructor overloading
    public function __construct($color = "Unknown", $model = "Unknown", $year = 0) {
        $this->color = $color;
        $this->model = $model;
        $this->year = $year;
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

시뮬레이션된 오버로드된 생성자 사용

class Main {
    public function run() {
        $defaultCar = new Car();
        $defaultCar->displayInfo();

        $myCar = new Car("Red", "Tesla", 2022);
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();

PHP의 캡슐화, 액세스 수정자 및 정적 멤버

캡슐화

PHP의 캡슐화는 클래스 내에서 데이터(속성)와 메서드(함수)를 묶는 방식입니다. 외부 간섭과 오용으로부터 물체의 내부 상태를 안전하게 보호합니다.

액세스 수정자

PHP의 액세스 한정자는 속성, 메소드 및 생성자의 가시성과 접근성을 제어합니다. PHP는 세 가지 주요 액세스 수정자를 지원합니다:

  • 공개: 어디서나 액세스 가능
  • 보호됨: 클래스, 하위 클래스 및 동일한 패키지 내에서 액세스할 수 있습니다.
  • private: 정의 클래스 내에서만 접근 가능합니다.

사용 예:

class ClassName {
    // Properties (Fields)
    // Methods
}

정적 멤버

PHP의 정적 멤버는 특정 인스턴스가 아닌 클래스 자체와 연결됩니다. 클래스 객체를 생성하지 않고도 접근이 가능합니다.

정적 속성:

정적 속성은 클래스의 모든 인스턴스에서 공유됩니다. static 키워드를 사용하여 선언됩니다.

class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

정적 방법:

정적 메소드는 static 키워드를 사용하여 선언됩니다. 인스턴스가 아닌 클래스에 속합니다.

$objectName = new ClassName();

정적 멤버에 액세스:

정적 멤버는 개체를 통하지 않고 클래스 이름을 사용하여 액세스합니다.

class Main {
    public function run() {
        $myCar = new Car(); // Creating an object of the Car class
        $myCar->color = "Red";
        $myCar->model = "Tesla";
        $myCar->year = 2022;
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();

PHP의 액세스 수정자

PHP의 액세스 한정자는 클래스 멤버의 가시성을 제어하여 캡슐화를 보장하고 액세스 제한을 적용합니다.

액세스 수정자의 유형

  1. 공개
  2. 보호됨
  3. 비공개

1. 공개

  • 액세스 가능 위치:어디서나
  • 용법: 널리 액세스해야 하는 회원의 경우 public을 사용하세요.
class Car {
    public $color;
    public $model;
    public $year;
}

2. 보호됨

  • 액세스 가능 위치: 클래스 및 하위 클래스 내
  • 사용법: 클래스 계층 구조 내에서만 액세스해야 하는 멤버에는 protected를 사용하세요.
class Car {
    public $color;
    public $model;
    public $year;

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

3. 비공개

  • 접근 가능 대상: 수업 내에서만 가능
  • 사용법: 정의 클래스 외부에서 액세스하면 안 되는 멤버에는 private을 사용하세요.
class Car {
    public $color;
    public $model;
    public $year;

    // Default constructor
    public function __construct() {
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

PHP의 비액세스 수정자

PHP의 비액세스 한정자는 가시성에 영향을 주지 않고 클래스 멤버의 동작을 수정합니다.

비액세스 수정자의 유형

  1. 정적
  2. 최종
  3. 추상

1. 정적

  • 용법: 인스턴스가 아닌 클래스에 속하는 속성과 메서드를 선언합니다.
  • 예:
class ClassName {
    // Properties (Fields)
    // Methods
}

2. 최종

  • 용법: 메서드의 추가 수정이나 클래스 상속을 방지합니다.
  • 변수: PHP는 최종 변수를 지원하지 않습니다.
  • 메서드: 최종 메서드는 재정의될 수 없습니다.
  • 수업: 최종수업은 연장할 수 없습니다.
  • 예:
class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

3. 초록

  • 용법: 불완전하고 하위 클래스에서 구현되어야 하는 클래스와 메서드를 선언합니다.
  • 추상 클래스: 인스턴스화할 수 없습니다.
  • 추상 메소드: 본문 없이 선언되며 서브클래스로 구현되어야 합니다.
  • 예:
$objectName = new ClassName();

PHP 및 액세스 수정자의 상속

계승

PHP의 상속은 한 클래스(하위 클래스)가 다른 클래스(슈퍼클래스)의 속성과 메서드를 상속할 수 있는 메커니즘입니다. 이는 코드 재사용을 용이하게 하고 클래스 간의 계층적 관계 생성을 허용합니다.

상속 구문

class Main {
    public function run() {
        $myCar = new Car(); // Creating an object of the Car class
        $myCar->color = "Red";
        $myCar->model = "Tesla";
        $myCar->year = 2022;
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();

class Car {
    public $color;
    public $model;
    public $year;
}

이 예에서는:

  • Animal은 $name 속성과 eat() 메서드가 있는 슈퍼클래스입니다.
  • Dog는 Animal에서 $name 및 eat()를 상속하고 고유한 메소드bark()를 추가하는 하위 클래스입니다.

상속의 액세스 수정자

PHP의 액세스 한정자는 하위 클래스와 프로그램의 다른 부분에서 클래스 멤버의 가시성을 결정합니다. 상속에 중요한 역할을 합니다.

일반 속성 및 메소드에 대한 액세스 수정자

  • 공개: 어디서나 액세스 가능
  • 보호됨: 클래스, 하위 클래스 및 동일한 패키지 내에서 액세스할 수 있습니다.
  • private: 선언된 클래스 내에서만 접근 가능합니다.
class Car {
    public $color;
    public $model;
    public $year;

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

정적 속성 및 메소드에 대한 액세스 수정자

PHP의 정적 멤버는 특정 인스턴스가 아닌 클래스와 연결됩니다. 상속 시 비정적 멤버와 동일한 액세스 규칙을 따릅니다.

class Car {
    public $color;
    public $model;
    public $year;

    // Default constructor
    public function __construct() {
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

정적 메서드는 상속되나요?

정적 메서드는 PHP에서 상속되지만 인스턴스 메서드와 같은 의미로 재정의될 수는 없습니다. 하위 클래스가 동일한 이름의 정적 메서드를 정의하면 상위 클래스의 정적 메서드가 숨겨집니다.

class ClassName {
    // Properties (Fields)
    // Methods
}

추상 메소드에 대한 액세스 수정자

PHP의 추상 메소드는 추상 클래스에서 정의되어야 합니다. 슈퍼클래스의 추상 메소드 가시성에 따라 서브클래스에서의 가시성이 결정됩니다. 서브클래스는 동일하거나 덜 제한적인 액세스 한정자를 사용하여 추상 메서드를 구현해야 합니다.

class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

최종 속성 및 메소드에 대한 액세스 수정자

PHP의 최종 메서드는 하위 클래스로 재정의될 수 없으며 최종 클래스는 확장될 수 없습니다.

  • 최종 메소드: 메소드 재정의를 방지합니다.
  • 최종 클래스: 상속을 방지합니다.
$objectName = new ClassName();

PHP에서 최상위 클래스 선언을 위한 구문

PHP에서 최상위 클래스(다른 클래스 내에 중첩되지 않은 클래스) 선언은 특정 키워드 순서를 따릅니다. 선언에는 액세스 한정자, 추상 또는 최종 키워드, 클래스 키워드가 포함될 수 있습니다.

사용할 수 있는 키워드:

  1. 액세스 한정자: 공개
  2. 수업 유형: 초록 또는 최종

주문하다:

class ClassName {
    // Properties (Fields)
    // Methods
}

통사론:

class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

중요 사항:

  1. PHP는 아무것도 지정되지 않은 경우 public을 기본 액세스 한정자로 가정합니다.
  2. 클래스는 abstract이면서 동시에 final일 수 없습니다.
  3. 최상위 클래스에는 protected 및 private 액세스 수정자가 허용되지 않습니다.

예:

$objectName = new ClassName();

PHP의 클래스 속성 선언 구문

사용할 수 있는 키워드:

  1. 액세스 한정자: 공개, 보호, 비공개
  2. 정적 수식어:정적
  3. 불변 수정자: 읽기 전용(PHP 8.1에서 도입됨)

주문하다:

class Main {
    public function run() {
        $myCar = new Car(); // Creating an object of the Car class
        $myCar->color = "Red";
        $myCar->model = "Tesla";
        $myCar->year = 2022;
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();

통사론:

class Car {
    public $color;
    public $model;
    public $year;
}

중요 사항:

  1. 액세스 한정자가 지정되지 않은 경우 속성은 기본적으로 public으로 설정됩니다.
  2. 정적 속성은 인스턴스가 아닌 클래스에 속합니다.
  3. 읽기 전용 속성은 선언 중이나 생성자(PHP 8.1)에서 한 번만 초기화할 수 있습니다.

예:

class Car {
    public $color;
    public $model;
    public $year;

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

PHP 클래스의 메소드 선언 구문

사용할 수 있는 키워드:

  1. 액세스 한정자: 공개, 보호, 비공개
  2. 정적 수식어:정적
  3. 최종 수식어: final
  4. 추상 수식어:추상

주문하다:

class Car {
    public $color;
    public $model;
    public $year;

    // Default constructor
    public function __construct() {
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

통사론:

class Car {
    public $color;
    public $model;
    public $year;

    // Parameterized constructor
    public function __construct($color, $model, $year) {
        $this->color = $color;
        $this->model = $model;
        $this->year = $year;
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

중요 사항:

  1. 액세스 한정자를 지정하지 않으면 기본적으로 공개 메소드입니다.
  2. 정적 메서드는 인스턴스가 아닌 클래스에 속합니다.
  3. final 메소드는 서브클래스에서 재정의될 수 없습니다.
  4. 추상 메서드는 추상 클래스에서 선언해야 하며 본문을 가질 수 없습니다.

예:

class Main {
    public function run() {
        $myCar = new Car("Red", "Tesla", 2022);
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();

PHP의 추상 클래스

PHP의 추상 클래스는 다른 클래스의 청사진을 정의하는 데 사용되는 Java의 추상 클래스와 유사합니다. 여기에는 추상 메서드(구현이 없는 메서드)와 구체적인 메서드(구현이 있는 메서드)가 모두 포함됩니다. 추상 클래스는 abstract 키워드를 사용하여 선언되며 직접 인스턴스화할 수 없습니다.


1. 추상 클래스 소개

추상 클래스는 파생 클래스의 기본 클래스 역할을 합니다. 이는 하위 클래스에 대한 일반적인 동작을 정의하는 동시에 해당 하위 클래스에서 특정 메소드의 구현을 허용합니다.


2. 추상 클래스 선언

PHP에서 추상 클래스를 선언하려면 클래스 키워드 앞에 추상 키워드를 사용하세요.

예:

class ClassName {
    // Properties (Fields)
    // Methods
}

3. 추상 방법

추상 메소드는 추상 클래스에 정의되어 있지만 본문은 없습니다. 서브클래스는 모든 추상 메소드를 구현해야 합니다.

예:

class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

4. 구체적인 방법

추상 클래스의 구체적인 메서드에는 본문이 있으며 하위 클래스에서 그대로 상속되거나 재정의될 수 있습니다.

예:

$objectName = new ClassName();

5. 서브클래스 생성

추상 클래스의 하위 클래스는 하위 클래스가 추상으로 선언되지 않는 한 모든 추상 메서드를 구현해야 합니다.

예:

class Main {
    public function run() {
        $myCar = new Car(); // Creating an object of the Car class
        $myCar->color = "Red";
        $myCar->model = "Tesla";
        $myCar->year = 2022;
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();

6. 추상 클래스 인스턴스화

추상 클래스는 직접 인스턴스화할 수 없습니다. 인스턴스를 생성하려면 구체적인 하위 클래스를 사용해야 합니다.

예:

class Car {
    public $color;
    public $model;
    public $year;
}

7. 추상 클래스의 생성자

추상 클래스에는 생성자가 있을 수 있으며 해당 생성자는 하위 클래스가 인스턴스화될 때 호출됩니다.

예:

class Car {
    public $color;
    public $model;
    public $year;

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

8. 필드와 메소드가 있는 추상 클래스

추상 클래스에는 인스턴스 변수와 구체적인 메소드가 포함되어 하위 클래스에 재사용 가능한 기능을 제공할 수 있습니다.

예:

class Car {
    public $color;
    public $model;
    public $year;

    // Default constructor
    public function __construct() {
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

9. 추상 클래스의 정적 메서드

추상 클래스에는 정적 메서드가 포함될 수 있습니다. 정적 메서드는 클래스에 속하며 인스턴스화하지 않고도 호출할 수 있습니다.

예:

class ClassName {
    // Properties (Fields)
    // Methods
}

PHP에서 추상 클래스 선언을 위한 구문

사용할 수 있는 키워드:

  1. 추상
  2. 공개, 보호, 비공개(액세스 한정자)

주문하다:

class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

예:

추상 및 구체적 메소드를 갖춘 추상 클래스

$objectName = new ClassName();

필드와 최종 메서드가 포함된 추상 클래스

class Main {
    public function run() {
        $myCar = new Car(); // Creating an object of the Car class
        $myCar->color = "Red";
        $myCar->model = "Tesla";
        $myCar->year = 2022;
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();

중요 사항:

  1. 추상 클래스는 직접 인스턴스화할 수 없습니다.
  2. 추상 메서드는 추상이 아닌 하위 클래스로 구현되어야 합니다.
  3. 모든 추상 메서드를 구현하지 않는 하위 클래스도 추상으로 선언해야 합니다.
  4. 추상 클래스의 구체적인 메소드는 하위 클래스가 재정의할 수 있는 선택 사항입니다.
  5. 추상 클래스에는 생성자, 속성 및 상수가 있을 수 있습니다.
  6. 추상 클래스는 메서드와 속성에 대해 모든 가시성 수정자를 사용할 수 있습니다.

PHP의 인터페이스

PHP의 인터페이스는 이를 구현하는 클래스에 대한 계약을 정의합니다. 클래스가 구현해야 하는 메서드를 지정하지만 메서드 구현 자체를 제공하지는 않습니다. 인터페이스를 사용하면 보다 유연한 모듈식 코드가 가능하므로 클래스가 상속 계층 구조에 관계없이 공통 메서드 시그니처 세트를 준수할 수 있습니다.


1. 인터페이스 소개

PHP의 인터페이스는 추상 클래스와 유사하지만 구현 없이 메서드 서명만 정의할 수 있습니다. 인터페이스를 구현하는 클래스는 인터페이스에 선언된 모든 메서드에 대한 구현을 제공해야 합니다. 클래스는 다중 인터페이스를 구현할 수 있으므로 인터페이스는 동작의 다중 상속에 대한 PHP 지원의 핵심 부분이 됩니다.


2. 인터페이스 선언

인터페이스를 선언하려면 인터페이스 키워드를 사용하세요. 인터페이스에는 메서드 선언(메서드 본문 없음), 상수 및 추상 메서드만 포함될 수 있습니다.

예:

class Car {
    public $color;
    public $model;
    public $year;
}

3. 인터페이스 구현

인터페이스를 구현하는 클래스는 인터페이스에 선언된 모든 메서드에 대한 구현을 제공해야 합니다. 클래스는 쉼표로 구분하여 여러 인터페이스를 구현할 수 있습니다.

예:

class Car {
    public $color;
    public $model;
    public $year;

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

4. 인터페이스 메소드 서명

인터페이스의 메서드는 본문을 가질 수 없으며 공개되어야 합니다. 클래스가 인터페이스를 구현할 때 메소드 서명을 포함하여 인터페이스에 선언된 대로 정확하게 이러한 메소드를 구현해야 합니다.

예:

class Car {
    public $color;
    public $model;
    public $year;

    // Default constructor
    public function __construct() {
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

5. 다중 인터페이스 구현

PHP의 클래스는 여러 인터페이스를 구현할 수 있습니다. 이를 통해 클래스가 다양한 계약을 준수할 수 있는 시스템을 설계하는 데 더 많은 유연성이 제공됩니다.

예:

class ClassName {
    // Properties (Fields)
    // Methods
}

6. 인터페이스 상수

인터페이스에는 상수가 포함될 수 있습니다. 이러한 상수는 자동으로 공개되며 인터페이스를 구현하는 모든 클래스에서 액세스할 수 있습니다.

예:

class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

7. 인터페이스 상속

인터페이스는 다른 인터페이스를 확장할 수 있습니다. 이는 하위 인터페이스가 상위 인터페이스의 모든 메서드(서명)를 상속하고 새 메서드를 추가할 수도 있음을 의미합니다. 하위 인터페이스를 구현하는 클래스는 상위 인터페이스와 하위 인터페이스 모두의 모든 메소드를 구현해야 합니다.

예:

$objectName = new ClassName();

8. 인터페이스의 정적 메서드

인터페이스에는 정적 메서드가 포함될 수 없습니다. 인터페이스에 선언된 모든 메서드는 인스턴스 메서드여야 합니다. 인터페이스는 구현 클래스에 대한 인스턴스 수준 계약을 정의하므로 인터페이스에서는 정적 메서드가 허용되지 않습니다.


PHP에서 인터페이스 선언 및 구현 구문

사용할 수 있는 키워드:

  1. 인터페이스
  2. 공개

주문하다:

class Main {
    public function run() {
        $myCar = new Car(); // Creating an object of the Car class
        $myCar->color = "Red";
        $myCar->model = "Tesla";
        $myCar->year = 2022;
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();

예:

메소드 서명과의 인터페이스

class Car {
    public $color;
    public $model;
    public $year;
}

다중 구현과의 인터페이스

class Car {
    public $color;
    public $model;
    public $year;

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}

중요 사항:

  1. 인터페이스 메서드: 인터페이스의 메서드는 공개되어야 하며 본문을 가질 수 없습니다.
  2. 다중 인터페이스 구현: 클래스는 여러 인터페이스를 쉼표로 구분하여 구현할 수 있습니다.
  3. 액세스 수정자: 인터페이스의 모든 메소드는 암시적으로 공개됩니다. private 또는 protected와 같은 액세스 한정자는 허용되지 않습니다.
  4. 인터페이스 상수: 인터페이스는 자동으로 공개되고 클래스를 구현하여 액세스할 수 있는 상수를 선언할 수 있습니다.
  5. 인터페이스 상속: 인터페이스는 메서드 시그니처를 결합하여 하나 이상의 인터페이스를 확장할 수 있습니다.
  6. 정적 메서드: 인터페이스는 정적 메서드를 포함할 수 없습니다.
  7. 모든 메소드 구현: 클래스는 구현하는 인터페이스에 의해 정의된 모든 메소드를 구현해야 합니다.

위 내용은 PHP, 클래스 및 객체의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.