이 기사의 예는 PHP 객체 지향 프로그래밍의 본질을 요약합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.
1 상속을 구현하기 위해 확장을 사용하고 오버로딩의 의미와 매직 메서드
클래스 B가 A를 확장합니다
선언할 때 B는 A의 메소드를 가질 필요가 없습니다
전화할 때:
$b=new B();
A의 $b->Method();
$b->A=1;의 속성
B의 $b->Method();
B의 $b->Method();
$a=new A();
네
A의 $a->Method();
$a->A=1;의 속성
불가능
B의 $a->Method();
B의 $a->Method();
오버로딩: B는 A를 상속하고 B는 A와 동일한 이름을 가진 메서드 특성을 구현합니다.
PHP의 "오버로딩"은 대부분의 다른 객체 지향 언어와 다릅니다. 전통적인 "오버로딩"은 동일한 이름을 가진 여러 클래스 메서드를 제공하는 데 사용되지만 각 메서드에는 매개 변수 유형과 번호가 다릅니다.
매직 메소드: PHP는 __(두 개의 밑줄)로 시작하는 모든 클래스 메소드를 매직 메소드로 처리합니다. 따라서 자신만의 클래스 메서드를 정의할 때 앞에 __를 붙이지 마세요.
2 개인 및 보호 액세스 수정자의 가시성 상속
개인 속성 메소드는 상속될 수 없습니다
속성 메서드 보호 클래스는 외부에 표시되지 않으며 상속될 수 있습니다
공용 속성 메서드로 정의된 클래스 멤버는 어디서나 액세스할 수 있습니다
php에서 이중 콜론의 3가지 응용::
"::" 연산자는 PHP 클래스 코드에서 자주 볼 수 있습니다. 이는 범위 제한 연산자로, 클래스 내 다양한 범위의 수준을 설정하는 데 사용됩니다. 왼쪽은 범위이고 오른쪽은 액세스 범위의 멤버입니다.
PHP에는 self와 parent라는 두 가지 범위가 정의되어 있습니다(정적 범위는 PHP6에서 제공됨).
범위 확인 연산자(Paamayim Nekudotayim이라고도 함) 또는 보다 간단히 콜론 쌍을 사용하여 정적 멤버, 메서드 및 상수에 액세스할 수 있으며 하위 클래스에서 부모 클래스의 멤버 및 메서드를 재정의하는 데 사용할 수도 있습니다.
echo MyClass::CONST_VALUE;
class OtherClass는 MyClass를 확장합니다
{
공개 정적 $my_static = '정적 var';
공개 정적 함수 doubleColon() {
에코 부모::CONST_VALUE . "n";
echo self::$my_static . "n";
}
}
OtherClass::doubleColon();
//하위 클래스가 상위 클래스를 재정의합니다
클래스 마이클래스
{
보호된 함수 myFunc() {
echo "MyClass::myFunc()n";
}
}
class OtherClass는 MyClass를 확장합니다
{
// 상위 클래스의 메서드를 재정의합니다
공개 함수 myFunc()
{
//그러나 재정의된 메서드는 계속 호출될 수 있습니다
parent::myFunc();
echo "OtherClass::myFunc()n";
}
}
$class = 새로운 OtherClass();
$class->myFunc();
4 PHP에서 이것의 역할, 자기와 부모
이것은 현재 객체 인스턴스에 대한 포인터이며 다른 객체나 클래스를 가리키지 않습니다.
self: 현재 클래스의 범위를 나타냅니다. 이와 달리 클래스의 특정 인스턴스를 나타내지 않습니다. Self는 클래스 외부의 코드에서 사용할 수 없으며 상속 계층에서 자신의 위치를 식별할 수 없습니다. 즉, 확장 클래스에서 self를 사용하면 상위 클래스의 메서드를 호출하지 않고 확장 클래스의 오버로드된 메서드를 호출합니다. Self는 클래스 자체를 가리킵니다. 즉, self는 인스턴스화된 개체를 가리키지 않습니다. 일반적으로 self는 클래스의 정적 변수를 가리키는 데 사용됩니다.
//생성자
함수 __construct()
{
$this->lastCount = self:$firstCount; //self를 사용하여 정적 변수를 호출할 때는 다음을 사용해야 합니다::(필드 연산 기호)
}
5 생성자와 소멸자
생성자가 있는 클래스는 객체가 생성될 때마다 이 메서드를 먼저 호출하므로 객체를 사용하기 전에 몇 가지 초기화 작업을 수행하는 것이 매우 적합합니다.
함수 __construct() {}
하위 클래스에 생성자가 정의된 경우 해당 상위 클래스의 생성자는 암시적으로 호출되지 않습니다. 상위 클래스의 생성자를 실행하려면 하위 클래스의 생성자에서 parent::__construct()를 호출해야 합니다.
PHP 5에서는 C와 같은 다른 객체지향 언어와 마찬가지로 소멸자 개념을 도입했습니다. 소멸자는 객체에 대한 모든 참조가 제거되거나 객체가 명시적으로 소멸될 때 실행됩니다.
함수 __destruct() {}
최종 키워드 6개
PHP 5에는 새로운 최종 키워드가 추가되었습니다. 상위 클래스의 메서드가 final로 선언되면 하위 클래스는 해당 메서드를 재정의할 수 없습니다. 클래스가 final로 선언되면 상속될 수 없습니다.
7 상속과 생성자
父类 | 子类 | 结果 |
有构造函数 | 无构造函数 | 父构造 |
有构造函数 | 有构造函数 | 子构造 |
표준 클래스를 정의하는 것처럼 인터페이스를 통해 인터페이스를 정의할 수 있습니다.
참고:
1) 그러나 여기에 정의된 모든 메소드는 비어 있습니다.
2) 인터페이스에 정의된 모든 메소드는 공용이어야 하며 이는 인터페이스의 특징입니다.
3) 여러 인터페이스를 구현할 때 인터페이스의 메소드는 동일한 이름을 가질 수 없습니다.
4) 확장 연산자를 사용하여 인터페이스를 상속할 수도 있습니다.
5) 인터페이스에서 상수를 정의할 수도 있습니다. 인터페이스 상수와 클래스 상수는 정확히 동일하게 사용됩니다. 이는 모두 고정된 값이며 하위 클래스나 하위 인터페이스에서 수정할 수 없습니다.
9가지 속성
클래스의 변수 멤버를 "속성"이라고 합니다. 속성 선언은 public, protected 또는 private 키워드로 시작하고 그 뒤에 변수가 옵니다. 속성의 변수는 초기화가 가능하지만, 초기화되는 값은 상수여야 합니다. 여기서 상수는 컴파일 단계 이후 실행 단계에서 계산되는 상수가 아니라 PHP 스크립트가 컴파일 단계에 있는 상수를 의미합니다.
PHP5에서는
을 얻기 위해 "__get()"과 "__set()" 두 함수가 미리 정의되어 있습니다.
해당 속성을 가져오고 할당할 뿐만 아니라 "__isset()"을 사용하여 속성을 확인하고 "__unset()"을 사용하여 속성을 삭제합니다.
간단히 말하면, 하나는 가치를 얻기 위한 것이고, 다른 하나는 가치를 부여하기 위한 것입니다. , "__set()" 및 "__get()" 두 메서드는 기본적으로 존재하지 않지만 생성자 메서드(__construct())와 마찬가지로 클래스에 수동으로 추가됩니다. 물론, 개인 스타일에 따라 이 두 메서드를 추가할 수도 있습니다. //__get() 메서드는 비공개 속성을 얻는 데 사용됩니다.
10개의 클론
객체 복사는 clone 키워드를 통해 완료할 수 있습니다(객체에 __clone() 메서드가 있으면 먼저 호출됩니다). 객체의 __clone() 메서드는 직접 호출할 수 없습니다.
객체가 복사되면 PHP5는 객체의 모든 속성에 대해 "얕은 복사"를 수행합니다. 속성의 모든 참조는 변경되지 않고 원래 변수를 가리킵니다. __clone() 메서드가 정의된 경우 새로 생성된 객체(복사로 생성된 객체)의 __clone() 메서드가 호출되며 필요한 경우 속성 값을 수정하는 데 사용할 수 있습니다.