이 키워드는 클래스와 메소드를 정의하는 데에만 사용할 수 있습니다. final은 상수를 의미하므로 final 키워드는 PHP에서 상수를 정의하는 데 사용하므로 final을 사용할 수 없습니다. 멤버 속성을 정의합니다.
14. final 키워드 적용
이 키워드는 클래스와 메소드를 정의하는 데만 사용할 수 있습니다.
final은 상수를 사용하기 때문입니다. Define() 함수는 PHP에서 상수를 정의하기 때문에 final을 사용하여
멤버 속성을 정의할 수 없습니다.
마지막 키로 표시된 클래스는 상속될 수 없습니다.
코드 스니펫
최종 클래스 Person{
… ...
}
class Student 확장 Person{
}
예 다음 오류가 발생합니다.
치명적인 오류: 클래스 학생은 최종 클래스(Person)에서 상속할 수 없습니다.
최종 키로 표시된 메서드는 하위 클래스에서 재정의할 수 없으며
코드 조각
입니다. class Person{
final function say() {
}
}
class Student 확장 Person{
function say() {
}
}
다음 오류 발생합니다:
치명적인 오류: 최종 메서드 Person::say()를 재정의할 수 없습니다.
15. 정적 및 const 키워드 사용
정적 키워드는 클래스의 멤버 속성과 멤버 메서드를 정적 멤버로 설명합니다. 혜택은요?
앞서 우리는 인간을 "Person" 클래스에 선언했습니다. "Person" 클래스에 "그 사람이 속한 국가"
속성을 추가하면 "Person" 클래스를 사용하여 수백 개를 인스턴스화할 수 있습니다. 이상의 인스턴스 개체가 있으면 각 개체는
"국가" 속성을 갖게 됩니다. 프로젝트가 중국용으로 개발된 경우 각 개체는
국가 속성과 기타 속성을 갖게 됩니다. "국가" 속성을 정적
멤버로 만들면 메모리에 국가 속성이 하나만 있게 되며 이 속성을 공유하는 개체가 수백 개 이상 있게 됩니다.
정적 멤버는 외부를 제한할 수 있습니다. 정적 멤버는 클래스에 속하며 어떤 객체 인스턴스에도 속하지 않기 때문에
클래스가 처음 로드될 때 공간이 할당됩니다. 다른 클래스는 액세스할 수 없으며 클래스의 인스턴스와만 공유됩니다.
클래스의 구성원을 어느 정도 보호할 수 있는지
메모리의 관점에서 분석해 보겠습니다. 메모리는 논리적으로 4개의 세그먼트로 나누어져 있으며 개체는 "힙 메모리"
에 배치됩니다. 클래스가 처음 로드될 때 객체의 참조는 "스택 메모리"에 배치되고 정적 멤버는 "초기화된 정적 세그먼트"에 배치됩니다.
배치되면 모든 객체에서 공유할 수 있습니다.
클래스의 정적 변수는 전역 변수와 매우 유사하며 클래스의 모든 인스턴스에서 공유할 수 있습니다. 메서드도 마찬가지입니다. 동일한
, 전역 함수와 유사합니다.
코드 조각
코드 복사코드는 다음과 같습니다.
<
class Person{
/ /다음은 해당 인물의 static 멤버 속성입니다.
public static $myCountry="China"
// var $name; //본인 이름
//정적 멤버입니다. 사람의 메서드
public static function say(){
echo "나는 중국인입니다
"
}
}
//정적 속성 출력
echo 사람:: $myCountry;
//정적 메서드 액세스
Person::say();
//정적 속성 재할당
Person::$myCountry="United States"
echo Person:: $나의국가;
?>
정적 멤버는 클래스가 처음 로드될 때 생성되기 때문에 위에서 언급한 것처럼 클래스 외부 개체를 요구하지 않고 클래스
이름을 사용하여 정적 멤버에 액세스할 수 있습니다. 이 클래스의 인스턴스 객체인 경우
객체를 사용하여 클래스의 정적 멤버에 액세스할 수 있나요? 위 그림을 보면 각 객체 내부에는 정적 멤버가 존재하지 않지만 각 객체는 공유될 수 있으므로 객체를 사용하여 멤버에 액세스하면 그러한 속성 정의가 없으므로 객체를 사용하여 정적 멤버에 액세스할 수 없습니다.
Java와 같은 다른 객체 지향 언어에서는 객체를 사용하여 정적 멤버에 액세스할 수 있습니다. PHP에서 객체를 사용하여 정적 멤버에 액세스할 수 있다면
사용하지 않는 것이 좋습니다. 프로젝트 작업 시 정적 멤버는 클래스 이름을 사용하여 액세스하는 것입니다.
클래스의 정적 메서드는 클래스의 정적 속성에만 액세스할 수 있습니다. 클래스의 정적 메서드는 클래스의 비정적
멤버에 액세스할 수 없습니다. 이유는 매우 간단합니다. 이 클래스의 다른 멤버에 액세스하려면 $this
참조를 사용해야 하며 참조 포인터 $this는 이 메서드를 호출하는 개체를 나타냅니다. 정적 메서드는
개체와 함께 호출되지 않습니다. 그러나 액세스할 클래스 이름이 있으므로 개체가 전혀 없으며 $this 참조가 없습니다.
가 없으면 $this 참조는 클래스의 비정적 멤버에 액세스할 수 없으며 클래스의 정적 멤버는 사용된 개체
에 액세스하므로 클래스의 정적 메서드는 클래스의 정적 속성에만 액세스할 수 있으므로 $this가 존재하지 않으므로 정적 메서드
의 다른 정적 멤버에 액세스하려면 특수 클래스를 사용합니다. " self"; self는 $this와 유사하지만 self는
이 정적 메서드가 있는 클래스를 나타냅니다. 그래서 정적 메서드에서는 해당 메서드가 위치한 클래스의 "클래스 이름"을 사용하거나,
"self"를 사용하여 다른 정적 멤버에 접근할 수 있는데, 특별한 상황이 아니면 보통 후자를 사용합니다. 즉, "self: :Member
Member 속성" 방법입니다.
코드 조각
코드 복사코드는 다음과 같습니다.
<class Person{
/ /다음은 people의 정적 멤버 속성입니다
public static $myCountry="China"
//이것은 people의 정적 멤버 방식이며 self를 통해 다른 정적 멤버에 접근합니다
public static; function say(){
echo "I am".self::$myCountry."
"
}
}
//액세스 정적 메서드
Person::say ();
?>
물론 가능하지만 "$this"는 참조도 사용할 수 없습니다. 클래스 이름 또는 "self::form of member attribute"를 사용하십시오. const는 상수를 정의하는 키워드입니다. PHP에서 상수를 정의하려면 "define()" 함수를 사용하지만
은 #define과 유사하게 "const" 키워드를 사용하여 클래스에서 상수를 정의합니다. C 프로그램에서
의 값을 변경하면 오류가 발생합니다. "const"로 수정된 멤버 속성의 액세스 방법은 "static"으로 수정된 멤버
의 액세스 방법과 유사합니다. 클래스 이름" 및 메서드의 "self" 키워드. 그러나 "$"
기호를 사용할 필요는 없으며 개체를 사용하여 액세스할 수도 없습니다.
코드 조각
코드 복사
코드는 다음과 같습니다.class MyClass{
//상수 상수 정의
const 상수 = '상수 값';
function showConstant() {
echo self::constant . "n"; add "$"
}
echo MyClass::constant . "n"; //"$"를 추가하지 않고 액세스하려면 클래스 이름을 사용하세요.
$class = new MyClass(); 🎜>$class ->showConstant();
// echo $class::constant;는 허용되지 않습니다
위 내용은 관련 측면을 포함하여 PHP 객체지향에서 최종 정적 const 키워드의 사용을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.