your programing

PHP에서 부모 메서드를 호출하는 여러 방법

lovepro 2020. 10. 10. 10:47
반응형

PHP에서 부모 메서드를 호출하는 여러 방법


처음에는 생성자의 두 메서드 호출이 왜 작동하는지 혼란 스러웠지만 이제는 이해한다고 생각합니다. 확장 클래스는 마치 클래스 자체에서 선언 된 것처럼 부모의 메서드를 상속하고 메서드는 부모에 있으므로 둘 다 작동합니다.

선호하는 방법 방법을 (를 통해 호출 (즉, 가장 좋은 방법)이 있다면 지금은 궁금하네요 parent또는 this어떤주의 사항이있을 경우), 이러한 동일한 코드를 실행 진정으로 동일한 방법으로하고 있는지 여부, 이상을 사용하는 경우 다른 하나.

미안 해요, 아마 생각을 너무 많이 했어요.

abstract class Animal {

    function get_species() {

        echo "test";

    }

}

class Dog extends Animal {

    function __construct(){

        $this->get_species();
        parent::get_species();

    }

}

$spike = new Dog;

부모 클래스에서 메서드가 종료되는 하위 클래스에서 메서드를 호출하는 세 가지 시나리오 (생각할 수있는)가 있습니다.

  1. 메서드는 하위 클래스에 의해 덮어 쓰여지지 않고 부모에만 존재합니다.

    이것은 귀하의 예제와 동일하며 일반적으로 사용하는 것이 좋습니다 $this -> get_species();.이 경우 두 가지가 사실상 동일하지만 메서드가 하위 클래스에 의해 상속되었으므로 구별 할 이유가 없다는 것이 맞습니다. 를 사용 $this하면 상속 된 메서드와 로컬로 선언 된 메서드간에 일관성을 유지할 수 있습니다.

  2. 메서드는 하위 클래스에 의해 덮어 쓰여지고 부모로부터 완전히 고유 한 논리를 갖습니다.

    이 경우 $this -> get_species();부모의 메서드 버전이 실행되는 것을 원하지 않기 때문에 분명히 사용하고 싶을 것 입니다. 다시 말하지만을 지속적으로 사용 $this하면이 경우와 첫 번째 경우의 차이에 대해 걱정할 필요가 없습니다.

  3. 메서드는 부모 클래스를 확장하여 부모 메서드가 달성하는 것에 추가합니다.

    이 경우에도 `$this -> get_species();하위 클래스의 다른 메서드에서 메서드를 호출 할 때 사용하려고합니다 . 부모 메서드를 호출 할 위치는 부모 메서드를 덮어 쓰는 메서드에서입니다. 예:

    abstract class Animal {
    
        function get_species() {
    
            echo "I am an animal.";
    
        }
    
     }
    
     class Dog extends Animal {
    
         function __construct(){
    
             $this->get_species();
         }
    
         function get_species(){
    
             parent::get_species();
             echo "More specifically, I am a dog.";
         }
    }
    

재정의 메서드 외부에서 부모 메서드를 직접 호출해야하는 유일한 시나리오는 두 가지 다른 작업을 수행하고 로컬이 아닌 부모의 메서드 버전이 필요하다는 것을 알고있는 경우입니다. 이럴 필요는 없지만, 그 자체가 존재한다면, 이에 접근하는 깔끔한 방법 get_parentSpecies()은 부모 메서드를 호출하는 것과 같은 이름으로 새 메서드를 만드는 것입니다 .

function get_parentSpecies(){

     parent::get_species();
}

다시 말하지만 이것은 모든 것을 멋지고 일관되게 유지하여 부모 메서드에 의존하지 않고 로컬 메서드에 대한 변경 / 수정을 허용합니다.


Unless I am misunderstanding the question, I would almost always use $this->get_species because the subclass (in this case dog) could overwrite that method since it does extend it. If the class dog doesn't redefine the method then both ways are functionally equivalent but if at some point in the future you decide you want the get_species method in dog should print "dog" then you would have to go back through all the code and change it.

When you use $this it is actually part of the object which you created and so will always be the most up-to-date as well (if the property being used has changed somehow in the lifetime of the object) whereas using the parent class is calling the static class method.

참고URL : https://stackoverflow.com/questions/11237511/multiple-ways-of-calling-parent-method-in-php

반응형