>source

추상 클래스에서 비지정 변수를 사용하려고하는데 하위 클래스에서 구현해야합니다.

추상적 인 방법으로 시도했지만 작동하지 않았습니다.

abstract class AbstractClass {
    protected abstract function foo($data);
    public function __construct($param) {
         self::foo($param);
    }
}
class ConcreteClass extends AbstractClass {
    public $propertie;
    protected function foo($data) {
         $this->propertie = $data;
    }
}
$fa = new ConcreteClass('banana');
echo $fa->propertie;

결과는 다음과 같습니다.

PHP Fatal error: Cannot call abstract method AbstractClass::foo() in folder/folder/File.php on line 7

  • 답변 # 1

    일반적으로 클래스 정적 메소드 인 self ::를 사용하고 있으며 상위 클래스 생성자를 호출하지 않았습니다.

    이것을 시도하십시오 :

    abstract class AbstractClass
    {
        protected abstract function foo($data);
        public function __construct($param)
        {
            $this->foo($param); // *** use $this, an instance method
        }
    }
    class ConcreteClass extends AbstractClass
    {
        public $propertie;
        public function __construct($param)
        {
            parent::__construct($param); // ** invoke the parent's constructor
        }
        protected function foo($data)
        {
            $this->propertie = $data;
        }
    }
    
    

관련 자료

  • 이전 math - 주어진 알고리즘이 왜 O (n ^ 2)입니까?
  • 다음 문자열이 변경되면 PHP의 문자열이 0으로 재설정됩니까?