PHP에서 서비스 클래스와 특성의 차이점
서비스 등급
서비스 클래스는 다양한 위치에서 사용하려는 일부 비즈니스 로직을 수행하는 클래스입니다. 일종의 "전역"작업을 수행하는 PHP 개체입니다.
코드가 하나의 클래스 또는 다른 클래스에 자연스럽게 맞지 않으면 서비스 후보가 있는 것입니다. 예를 들어, 메일링 서비스나 사용자 생성 서비스가 있을 수 있습니다. 이들은 다른 장소에서 반복해서 반복해야 하는 작업입니다. 이것은 그들을 서비스 클래스에 대한 좋은 후보로 만듭니다.
서비스 클래스에 대한 몇 가지 아이디어:
서비스 클래스의 예(Laravel에서)
다음은 UptimeRobot API에 연결하고 데이터를 검색하는 서비스 클래스
App\Services\UptimeRobotAPI.php
의 예입니다.<?php
namespace App\Services;
use GuzzleHttp\Client;
class UptimeRobotAPI
{
protected string $url;
protected string $http;
protected array $headers;
public function __construct (Client $client)
{
$this->url = 'https://api.uptimerobot.com/v2/';
$this->http = $client;
$this->headers = [
'cache-control' => 'no-cache',
'content-type' => 'application/x-www-form-urlencoded',
];
}
private function getResponse (string $uri = NULL)
{
// Making a GET request to UptimeRobot API using GuzzleHttp...
}
private function postResponse (string $uri = NULL, array $params = [])
{
// Making a POST request to UptimeRobot API using GuzzleHttp...
}
public function getMonitors ()
{
return $this->getResponse('getMonitors');
}
}
이제 UptimeRobotAPI 서비스를 다음과 같이 사용할 수 있습니다.
<?php
namespace App\Http\Controllers;
use App\Services\UptimeRobotAPI;
class MonitorsController extends Controller
{
public function showMonitors (UptimeRobotAPI $uptimeRobotAPI)
{
$monitors = $uptimeRobotAPI->getMonitors();
return view('monitors.index', compact('monitors'));
}
}
특성
특성은 여러 클래스에서 재사용하고 싶지만 해당 클래스가 다른 부모로 확장되기 때문에 재사용할 수 없는 메서드 집합입니다. 특성은 언어 구조이며 PHP가 다중 클래스 확장을 지원하지 않기 때문에 만들어졌습니다.
트레이트의 예(Laravel에서)
다음은 Laravel 애플리케이션을 개발할 때 자주 사용하는
app/Traits/ApiResponder.php
특성의 예입니다.<?php
namespace App\Traits;
use Illuminate\Http\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
trait ApiResponder
{
public function successResponse ($data, int $code = Response::HTTP_OK): JsonResponse {
return response()->json([
'data' => $data,
'code' => $code,
], $code)->header('Content-Type', 'application/json');
}
public function errorResponse ($error, int $code): JsonResponse
{
return response()->json([
'error' => $error,
'code' => $code,
], $code)->header('Content-Type', 'application/json');
}
}
특성이 생성되면 다음과 같이 가져올 수 있습니다.
<?php
namespace App\Http\Controllers;
use App\Traits\ApiResponder;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests, ApiResponder;
// ...
}
트레이트를 가져오면 사용할 준비가 된 것입니다.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\JsonResponse;
class TwilioSettingsController extends Controller
{
public function fetchSettings (): JsonResponse
{
$response = TwilioSettings::getSettings();
return $this->successResponse($response);
}
}
끝. 이 기사가 도움이 되었기를 바랍니다. 더 많은 콘텐츠를 기대해주세요!
저를 지원하고 싶다면 buy me a coffee :)
Reference
이 문제에 관하여(PHP에서 서비스 클래스와 특성의 차이점), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/andrewsavetchuk/the-difference-between-service-classes-and-traits-in-php-41jm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)