[Laravel] Extends를 이용한 부모 클래스 상속받기
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을 사용하여야 한다.