>백엔드 개발 >PHP 튜토리얼 >PHP 객체지향에서 최종 static const 키워드 사용

PHP 객체지향에서 최종 static const 키워드 사용

WBOY
WBOY원래의
2016-08-08 09:19:50828검색

이 키워드는 클래스와 메소드를 정의하는 데에만 사용할 수 있습니다. 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 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

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