2016-07-19 3 views

답변

9

@을 PHP로 사용하는 경우 좋은 사례가 있습니다. 일부는입니다.

하나의 좋은 예는 객체 지향 코드를 작성하고 무언가가 잘못되었을 때 예외를 throw하는 깨끗한 객체 API를 원한다면 좋은 사례입니다. 당신은 클래스를 디자인하고 있습니다, 그리고 당신의 객체는 수행합니다, 예를 들어 file_get_contents 콜이 있습니다. 자체적으로 포함 된 멋진 객체 API를 유지하려면 뭔가 잘못되었을 때 예외를 throw해야합니다.

@file_get_contents(...) 

@ 앞에 덧붙이는 the warning을 억제하고이 객체의 사용자가 예외를 얻을 수 있도록이 있습니다. 대신 false을 확인한 다음 예외를 throw하십시오.

왜이 작업을 수행해야합니까? 왜냐하면 PHP는 서로 비교할 때 유사점이나 표준이없는 함수의 혼합 된 조합이기 때문입니다.


그리고 @와는 아무 상관없는 특정 예와

, 당신은 isset($_SESSION['login'])을 할 것입니다.

0

우선 단지 이것 때문에

public function Foo(){ 
    $_SESSION['login'] .= $_SESSIN['login'] . " blah blah"; 
} 

의 미세 같은 수퍼 글로벌 somethign.

@은 알림을 끄는 데 사용됩니다. 그리고 그 이유는 단지주의를 끄기 때문에 당신이 일한다고 가정하는 이유입니다. :). $ _SESSION은 아직 정의되지 않았습니다. 이 귀결 http://php.net/manual/en/language.operators.errorcontrol.php

2

를 살펴 보자 : "때 괜찮 @을 사용하는 것입니다"

답변은 입니다.

@ 연산자는 오류를 억제합니다. 기본적으로 오류를 억제하고 싶지 않은 정상적인 상황은 없습니다. 오류 보고서는 오류의 실수, 오타, 잘못된 가정을 이해하는 데 도움이됩니다. 이 경우 코드에서 항상 $_SESSION['login']이라는 가정을합니다. 그 가정은 명백히 틀렸고, PHP는주의 사항을 통해 PHP에 대해 알려줍니다. 이 가정이 실패하게하는 코드에 버그가 있거나 isset($_SESSION['login'])을 사용하여 가정을 변경해야합니다. 당신은 당신이 오류를 기대하고 그 의미와 그들이 무해하고 다른 방법으로 억제 할 수없는 알고있는 것을 알고 3 자 코드로 작업하는 경우

@를 사용하는 유일한 합법적 인 경우

이다.

+2

유일한 합법적 인 사용의 경우 독립적으로 코드를 테스트 할 수

  • 능력은'@는'타사 코드로 작동되는 것은 사실로 올바르지 않습니다. * 잠깐, 이미 이런 일이 없었습니까? * : D – Jimbo

  • +3

    @Jimbo PHP 표준 라이브러리를 제 3 자로 계산하면 ... – NikiC

    9

    이 방법을 잘못보고 있습니다.

    먼저 클래스 내에서 PHP 슈퍼 전역에 액세스해서는 안됩니다. 대신 코드의 부트 스트랩 단계에서 인스턴스를 만들 때 매개 변수로 사용해야합니다.

    $request = new Request(
        $_POST, 
        $_GET, new Session($_SESSION) 
    ); 
    

    이렇게하면 좋을 것입니다.

    $request 인스턴스는 사용자 입력을 처리하는 클래스로 전달됩니다. 당신이 그것의 부분이 여전히 include- 기반으로하는 기존 코드베이스에서 작업 할 때 제어의 경우 (전역 범위에 영향을 미치는와 런타임에 인식 사용자 입력을 변경할 수

    • 능력이 두 가지 주요 장점이 있습니다 지향 프로그래밍)에 대한 웹 서버
    +4

    기본적으로 Teresko는이 경우 OOP에서이를 지적합니다. 요청에 대한 추상화가 필요합니다 (그래서 테스트 할 수 있습니다). 그리고 일반적으로 컴포지션 루트에서이 개체를 작성하기 때문에 나머지 응용 프로그램은이 Request 개체와 슈퍼 전역을 사용하지 않습니다. – Jimbo

    관련 문제