PHP로 예외를 던지는 방법이 아니라 예외를 만드는 유일한 이유입니다.
12620 단어 PHP
<?php
$message = sprintf(
"HTTP/%s %s %s",
$response->getVersion(),
$response->getCode(),
$response->getMessage()
);
throw new HttpException($message, $response->getCode());
그럴 때 그런 방법을 만들면 편해요.이때 제작 예외 투척 방법과 제작 예외 귀환 방법 두 가지 실시 방법을 고려할 수 있다.예를 들면 다음과 같은
raise
및 create
.<?php
class HttpException extends \Exception
{
/**
* 例外を作成して投げるメソッド
*
* @param $response HttpResponse
* @throws HttpException
*/
public static function raise(HttpResponse $response)
{
$message = sprintf(
"HTTP/%s %s %s",
$response->getVersion(),
$response->getCode(),
$response->getMessage()
);
throw new HttpException($message, $response->getCode());
}
/**
* 例外を作成するメソッド
*
* @param $response HttpResponse
* @return HttpException
*/
public static function create(HttpResponse $response)
{
$message = sprintf(
"HTTP/%s %s %s",
$response->getVersion(),
$response->getCode(),
$response->getMessage()
);
return new HttpException($message, $response->getCode());
}
}
(이 예라면 구조기를 말하면 되는 것도 아니기 때문에 예가 맞지 않을 수도 있다.)저는 개인적으로 예외를 만들고 던지는 방법을 많이 사용하지만 생각한 부분이 있어서 가능한 예외로 만들고 돌아오는 방법이 아닐까 싶습니다.
까닭
다음은 예외를 만들고 예외를 만들어 돌아오는 방법의 반입니다.
<?php
namespace App;
class Exception extends \Exception
{
/**
* @param $message
* @throws Exception
*/
public static function raise($message)
{
throw new static($message);
}
/**
* @param $message
* @return Exception
*/
public static function create($message)
{
return new static($message);
}
}
?>
아래와 같이 사용한다.<?php
namespace App;
class Sample
{
public function test1($val)
{
if ($val == false) {
Exception::raise("oops!");
}
}
public function test2($val)
{
if ($val == false) {
throw Exception::create("oops!");
}
}
}
?>
이 테스트는 아래와 같다.<?php
namespace Tests;
use App\Sample;
use App\Exception;
class SampleTest extends \PHPUnit_Framework_TestCase
{
public function test1_ok()
{
(new Sample())->test1(true);
}
public function test1_err()
{
$this->setExpectedException(Exception::class, "oops!");
(new Sample())->test1(false);
}
public function test2_ok()
{
(new Sample())->test2(true);
}
public function test2_err()
{
$this->setExpectedException(Exception::class, "oops!");
(new Sample())->test2(false);
}
}
?>
어떻게 된 거야?예외를 만들어 되돌리는 방법을 사용할 때 예외의 다음 줄은 사선으로 간주되고, 예외를 만들어 던지는 방법은 실행되지 않은 줄로 간주된다.
아래처럼
@codeCoverageIgnore
사용하면 커버를 무시할 수 있지만 하나씩 쓰는 것도 번거롭다.<?php
namespace App;
class Sample
{
public function test1($val)
{
if ($val == false) {
Exception::raise("oops!");
} // @codeCoverageIgnore
}
public function test2($val)
{
if ($val == false) {
throw Exception::create("oops!");
}
}
}
?>
최후
나는 억지로 C0 덮개를 100% 녹일 필요도 없고, 그렇게 구애받을 필요도 없다고 생각한다. 과연 무엇이든지 다 된다.
또 어떤 방법이든 예외적인 창고 추적은 한 단계 깊어진다.PHP는 예외
new
일 때 스택 추적입니다.다른 언어(C# 아니요?)이렇게 되면
new
가 아닌 throw
했을 때의 스택 스토킹인 것 같고, 예외를 만들어 던지는 방법보다 예외를 만들어 되돌리는 방법으로 사람을 부르는 것throw
은 보상을 받는 것 같다.
Reference
이 문제에 관하여(PHP로 예외를 던지는 방법이 아니라 예외를 만드는 유일한 이유입니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ngyuki/items/edd40b78f1561cb13b09텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)