[Laravel] Extends를 이용한 부모 클래스 상속받기 updated_at: 2024-12-14 03:43

extends 사용법

Extends는 자식클래스에서 부모 클래스를 상속받아서 사용하는 것입니다.
Extends는 하나만 가능하면 다중 extends를 사용하기위해서는 차상위 class에서 extends를 사용하고 또 한 차차상위 class에서 extends.... 사용하는 방식이 있거나
혹은 Trait을 사용하는 방식이 있다. Trait의 의미와 사용법

간단한 extends

ParentClass.php

<?php
class ParentClass
{
  public function userInfo($user_id)
  {
    return '';
  }
}

ChildClass.php

<?php
class ChildClass extends ParentClass
{
  public function index()
  {
    echo $this->userInfo('user_id); // ParentClass의 userInfo 호출
  }
}

상위, 차상위, 차차상위.. 를 extends하기

<?php
class Parent2Class
{
  public function userInfo($user_id)
  {
    return '';
  }
}

class Parent1Class extends Parent2Class
{

}

class ChildClass extends Parent1Class
{
  public function index()
  {
    echo $this->userInfo('user_id); // ParentClass의 userInfo 호출
  }
}

상위 클래스에 construct가 존재할때

부모클래스의 construct에 사용되는 인자값과 자식이 부모클래를 호출할때(parent::__construct())의 construct 인자값의 수는 동일하여야 한다.
ParentClass.php

<?php
use Samples\SampleService;

class ParentClass
{
  protected $sampleSvc;
  public function __construct(SampleService $sampleSvc) {
    $this->sampleSvc = $sampleSvc;
  }
}

ChildClass.php

<?php
use Samples\SampleService;

class ChildClass extends ParentClass
{
  public function __construct(SampleService $sampleSvc)
  {
    parent::__construct($sampleSvc);
  }
}

\App::make() 를 이용한 construct 처리

상기처럼 처리할 경우 인자값을 많이 넘겨야 할 경우 좀 복잡해 질 수가 있다. 이럴 경우 부모클래스에만 바로 construct를 할 필요가 있는데 이때 사용가능한 것이 \App::make() 이다.

ParentClass.php

<?php
use Samples\SampleService;

class ParentClass
{
  protected $sampleSvc;
  public function __construct() {
    $this->sampleSvc = \App::make('Samples\SampleService');
  }
}

ChildClass.php

<?php

class ChildClass extends ParentClass
{
  public function __construct()
  {
    parent::__construct();
  }
}

PHP에서는 다중 상속이 불가능하다. 따라서 다중 상속을 사용하기 위해서는 trait을 사용하여야 한다.

평점을 남겨주세요
평점 : 5.0
총 투표수 : 1

질문 및 답글