-
-
- 클래스 직원{
- 비공개 $sal=3000;
- //protected $sal=3000 ;
- 공용 함수 getSal(){
- return $this->sal;
- }
- }
- 클래스 관리자가 직원을 확장합니다. {
- protected $sal=5000;
public function getParentSal(){
- //여기에 반환되는 것은 상위 클래스의 비공개 속성입니다.
- return parent::getSal();
- }
- }
- $manager = new Manager();
- echo "PHP ".phpversion()."
";
- echo $manager->getSal();
- echo "< ;br> ";
- echo "부모의 $sal ".$manager->getParentSal();
- ?>
-
코드 복사
프로그램 실행 결과:
PHP 5.3.8
3000
부모님 월급 3000
상위 클래스의 속성이 하위 클래스에 의해 재정의되는 경우.
결과는 이것입니다. 5행의 속성 정의는 보호됩니다.
-
-
- 반 직원{
- //private $sal=3000;
- protected $ sal=3000;
- 공용 함수 getSal(){
- return $this->sal;
- }
- }
class Manager가 직원 확장 {
- protected $sal=5000;
public function getParentSal(){
- //여기에 반환되는 것은 상위 클래스의 비공개 속성입니다.
- 부모 반환: :getSal( );
- }
- }
- $manager = new Manager();
- echo "PHP ".phpversion()."
";
- echo $manager- >getSal ();
- echo "
";
- echo "부모의 $sal ".$manager->getParentSal();
- ?>
-
코드 복사
프로그램 실행 결과:
PHP 5.3.8
5000
부모님 월급 5000
첫 번째 열에 있는 상위 클래스의 프라이빗 $sal은 다시 작성되지 않았으므로 상위 클래스 메서드 $manager->getSal()은 상위 클래스의 자체 프라이빗 속성인 $sal을 호출합니다. 기억 속에 있어요.
두 번째 열에서는 부모 클래스의 보호된 $sal이 재정의되었습니다. 이 부모 클래스의 $manager->getSal() 메서드는 재정의된 $sal을 호출합니다. 시간은 $sal 뿐입니다.
다음 세 번째 예를 살펴보겠습니다.
하위 클래스에서 재정의된 메서드는 현재 비공개 클래스에 유효합니다.
-
-
- 클래스 직원{
- private $sal=3000;
- public 함수 getSal( ){
- return $this->sal;
- }
- }
class Manager가 직원을 확장합니다. {
- private $sal=5000;
- //재작성된 메소드
- public function getSal(){
- return $this->sal;
- }
- public function getParentSal(){
- //여기서 반환되는 것은 상위 Private입니다. 클래스 속성.
- return parent::getSal();
- }
- }
- $manager = new Manager();
- echo "PHP ".phpversion()."< br>";
- echo $manager->getSal();
- echo "
";
- echo "parent's $sal ".$manager->getParentSal();
- ?>
-
코드 복사
결과 실행
PHP 5.3.8
5000
부모님 월급 3000
이 예에서 하위 클래스는 getSal() 메서드를 재정의하므로 이 클래스가 호출하는 것은 하위 클래스의 속성입니다.
이 하위 클래스 줄에 주석을 달면
//비공개 $sal=5000;
다음과 같은 오류를 발견하게 될 것입니다: 주의: 정의되지 않은 속성: Manager::$sal in E:wampwwwoo2-52-5-3.php on line 14
12행에서 하위 클래스 다시 쓰기 메서드를 주석 처리하면 echo $manager->getSal();의 결과는 상위 클래스 3000 의 비공개 속성 $sal입니다.
zend 디버깅 상태를 열어 메모리에서 무슨 일이 일어나고 있는지 확인하세요. 맨 아래에 $sal이 2개 있다는 점에 유의하세요. 각각 3000과 5000입니다.
-
- 클래스 직원{
- private $sal=3000;
- public function getSal(){
- return $ this->sal;
- }
- }
- class Manager는 직원을 확장합니다. {
- protected $sal=5000;
- public function getParentSal(){
- return $this->sal ;
- }
- }
- $manager = new Manager();
- echo "PHP ".phpversion()."
";
- echo $manager->getSal( );
- ?>
코드 복사
프로그램 실행 결과:
PHP 5.3.8
3000
상위 클래스의 $sal 속성을 protected로 변경하면 하위 클래스가 상위 클래스의 속성을 재정의합니다. 메모리에는 $sal이 하나만 있습니다.
-
- 클래스 직원{
- protected $sal=3000;
- public function getSal(){
- return $ this->sal;
- }
- }
- class Manager는 직원을 확장합니다. {
- protected $sal=5000;
- public function getParentSal(){
- return $this->sal ;
- }
- }
- $manager = new Manager();
- echo "PHP ".phpversion()."
";
- echo $manager->getSal( );
- ?>
코드 복사
프로그램 실행 결과:
PHP 5.3.8
5000
참고:
PHP5는 parent-> 대신 parent::를 사용하여 부모 클래스를 호출합니다. 이는 PHP5가 부모 클래스가 메모리에 생성되는 것을 원하지 않는다는 것을 보여주기에 충분합니다.
PHP5는 Java보다 상속을 더 간단하게 만들고 싶어합니다.
|