ProgramingTip

모든 좋은 PHP 개발자가 답할 수있는 질문

bestdevel 2020. 10. 18. 18:52
반응형

모든 좋은 PHP 개발자가 답할 수있는 질문


나는 모든 좋은 .Net 개발자가 대답 할 수있는 질문 을 진행하고 있고이 질문 의 내용과 접근 방식에 깊은 인상을 대답 같은 정신으로 PHP 개발자에게 질문을하고 있습니다.

좋은 PHP가 대답 할 프로그래머 수 있어야하는 질문무엇 이라고 생각 - Please Sign in?

편집 : 나는이 질문을 커뮤니티 위키로 표시하고 사용자별로 다르며 프로그래밍 커뮤니티를 전반적으로 제공하는 것을 목표로합니다.

놀라운 답변을 기대합니다.

참고 : 사람들이 언어와 관련하여 새로운 것을 배울 수 있습니다 의견에 제안 된 질문에도 대답하십시오.


사실, 나는 다른 곳 에서이 질문을 훔 쳤지 만 (더 이상 어디서 읽었는지 기억할 수 없음) 재미 생각했습니다.

Q : 무엇입니까 T_PAAMAYIM_NEKUDOTAYIM?
A : 범위 확인 연산자 (이중 콜론)

그것은 의미하는 바를 즉시 알고 있습니다. 경험이 부족한 (히브리어가 아닌) 개발자는 목적 읽고 싶을 수 있습니다 .

그러나 이제 더 심각한 질문 :


Q : '경고 : 헤더 정보를 수 없습니다-이미 보낸 헤더'경고의 원인은 무엇이며 무엇입니까?
A : 원인 : 본문 데이터가 전송되어 헤더도 전송되었습니다.
먼저 먼저 특정 코드를 실행하십시오. 실수로 공백이나 다른 문자를 보내지 사고 확인하십시오.


Q : 이 쿼리의 문제 : "SELECT * FROM table WHERE id = $_POST[ 'id' ]"?
A : 1. SQL 인젝션에 취약합니다. 쿼리에서 직접 사용자 입력을 사용하지 않습니다. 먼저 소독하십시오. 준비된 문 ( PDO ) 사용을 선호합니다 . 2. 모든 열 (*)을 선택하지 않고 모든 단일 열을 지정합니다. 이는 예를 들어 어느 시점에 BLOB 열이 추가 될 때 쿼리가 메모리를 차지하는 것을 방지 할 것입니다.


Q : 문에 어떤 문제가 if( !strpos( $haystack, $needle ) ...있습니까?
A : strpos $ 바늘을 처음 위치의 위치를 ​​반환합니다 0. 이후 0도에 해결 false솔루션 엄격한 비교를 사용하는 것입니다 :if( false !== strpos( $haystack, $needle )...


Q : 문을 작성하는 데 선호되는 방법은 무엇이며 그 이유는 무엇입니까?
if( 5 == $someVar )또는 if( $someVar == 5 )
A : 전자는 2 개의 등호 ( $someVar = 5) 를 사용하는 것을 잊었을 때 실수로 5를 $ someVar에 할당하는 것을 방지 하고 오류를 유발 한 후라는 것입니다.


Q : 이 코드가 주어지면 :

function doSomething( &$arg )
{
    $return = $arg;
    $arg += 1;
    return $return;
}

$a = 3;
$b = doSomething( $a );

...의 가치 무엇 $a$b함수 호출 후 이유는?
A : $a 있습니다 4$b입니다 3. 전자는 $ arg가 참조로 전달되기 때문에 후자는 함수의 반환 값이 인수의 초기 값의 복사본 (참조가 아님)이기 때문입니다.


OOP 특정

Q : 무슨 사이의 차이는 public, protectedprivate클래스 정의에서?
A : public "모든 사람" protected이 클래스 멤버를 사용할 수 있으며, 클래스 멤버를 자신과 파생 클래스 private에만 사용할 수 있으며, 클래스 멤버를 클래스 자체에서만 사용할 수 있습니다.


Q : 이 코드의 문제 :

class SomeClass
{
    protected $_someMember;

    public function __construct()
    {
        $this->_someMember = 1;
    }

    public static function getSomethingStatic()
    {
        return $this->_someMember * 5; // here's the catch
    }
}

A : 정적 메소드는 클래스를 인스턴스화하지 않을 수 없습니다. $ this에 액세스 할 수 없습니다.


Q : 인터페이스와 추상 클래스의 차이점은 무엇입니까?
A : 인터페이스는 구현 클래스와 인터페이스를 호출하는 객체 계약을 정의합니다. 추상 클래스는이를 확장 할 클래스에 대한 특정 동작을 미리 정의합니다. 특정 방법이 존재하도록 보장하기 때문에 어느 정도 계약으로 될 수도 있습니다.


Q : 실제로 동작을 실행하는 방법이없는 내부 멤버에 직접 매핑되는 getter 및 setter를 주로 정의하는 클래스에 문제가 있습니까?
A : 용도가 다른 용도없이 고상한 배열로 작동하기 때문에 코드 냄새 일 수 있습니다.


Q : PHP의 인터페이스 사용 구현이 차선책 인 이유는 무엇입니까?
A : PHP는 메소드의 예상되는 반환 유형을 정의합니다. 이는 거의없는 것으로 인터페이스를 거의 쓸모 없게 만듭니다. :-피


확실히 보안 질문!

(이 게시물의 간단한 답변은 물론 PHP 웹 응용 프로그램을 훨씬 복잡합니다)

  • SQL을 처리하는 방법?

MySQL 시작을위한 mysql_real_escape_string (). 그런 다음 PDO를 학습하여 데이터베이스 공급 업체간에 준비된 설명과 이식성을 활용하십시오.

  • CSRF (Cross-Site Request Forgery)를 처리하는 방법은 무엇입니까?

중요한 작업을 보호하기 위해 모든 중요한 요청에 토큰을 추가합니다 (사용자는 중요한 요청을 보내기 전에 양식을 봤어야합니다).?

  • XSS (Cross-Site Scripting)를 반영하고 저장하는 방법은 무엇입니까?

htmlentities ()는 시작 좋습니다.

  • XXX 주입의 변형 : LDAP 주입, XPath 주입 등 ...?

XXX에서 사용하는 "어휘"가 무엇인지 알고 나서 위생 처리 및 / 또는 "확인 및 거부"에 필요한 것을 공제해야합니다.

  • 현명한 기능 목록은 무엇입니까?

PHP 코드 (원격 파일에 포함될 수 있음)를 해석하거나 시스템에서 명령을 실행하는 함수. 짧고 불완전한 목록은 다음과 같습니다 : exec (), passthru (), system (), popen (), eval (), preg_replace () ...

  • 파일 포함 위험을 처리하는 방법?
  • 경로 횡단이란 무엇입니까?
  • 파일 업로드와 관련된 위험은 무엇입니까?

파일 또는 원격 리소스를 열 때 사용되는 매개 변수를주의 깊게 확인해야합니다.

  • 어떻게 당신의 PHP 구성의 구성을 강제 하는가 (즉, php.ini의 사용이 무엇인지 알고 있습니까)?

길어질 것이므로 대답을 건너 뛰고 PHP 매뉴얼을 읽으십시오.

  • 사용자 데이터 필터링에 대한 정보 : 삭제확인 및 거부 의 차이점은 무엇 입니까?

첫 번째는 덜 적대적인 것으로 항목을 변형합니다. 두 번째는 항목이 올바른지 확인하고 거부하지 않으면 확인합니다.


"왜 다른 것을 사용하지 않습니까?"

죄송합니다. 누군가가 말해야했습니다. :)


PHP는 크로스 브라우저입니까?

(나는 이것이 많은 사람들을 웃게 만들 것이라는 것을 알고 있지만, PHP 포럼에서 더 많이 묻는 질문입니다!)


좋은 질문은 HTTP가 어떻게 작동합니까? 다른 HTTP 통신 간의 작업 GETPOST데이터는 PHP 개발에 내재되어 있습니다. 더 넓은 맥락에서 HTTP가 작동하는 방식과 PHP가이를 구현하는 방식을 이해하는 데 큰 도움이됩니다.


==와 ===의 차이점은 무엇이며 왜 ==를 사용하고 싶습니까?


2.5대신 다음 코드가 표시되는 이유를 설명하십시오 3.

$a = 012;
echo $a / 4;

답변 :0 PHP에서 숫자 앞에 a가 있으면 그 숫자는 8 진수 (base-8) 로 취급됩니다 . 따라서 8 진수 012는 10 진수와 같습니다 10.


아직 아무도 건드리지 않았지만 모든 PHP 개발자는 다음과 같이 길게 말할 수 있어야합니다. 왜 register_globals나쁜가요?


사이트가 PHP를 사용하여 개발되고 완전히 엉망인 경우 다음과 같습니다.

a) PHP 오류

b) 프로그래머 오류


사용자 입력을 이스케이프하는 모범 사례는 무엇입니까? (이 질문이 자주 나오는 것 같습니다)


  • $ array의 "name"요소를 호출 할 때 올바른 것은 무엇입니까? :

    • $array[name]
    • $array['name']

    둘 다 작동하는 경우가 많지만 인용 된 형식 만 정확합니다. define('name', 0);그리고 벌레가 날아가는 것을 지켜보십시오. 나는 이런 식으로 너무 많이 보았다.

  • 양식 요소를 배열로 제출하려면 어떻게해야합니까?

    이름 속성에 빈 대괄호를 추가합니다. 여러 <input type="checkbox" name="checkboxes[]" />요소가 서버의 배열로 변환됩니다 (예 :) $_POST['checkboxes'][0..n]. 100 % PHP 전용이라고 생각하지는 않지만 $_POST가능한 모든 'checkboxes'.$i요소에 대해 루프를 통과 하는 것보다 확실 합니다 .

  • mysql_, mysqli_ 또는 PDO?

    여기에서 한 가지 잘못된 답만 있습니다. mysql_ 라이브러리는 준비된 명령문을 수행하지 않으며 더 이상 악에 대한 능력을 변명 할 수 없습니다. 실행 된 쿼리 " mysql_real_escape_string()" 당 여러 번 호출 될 것으로 예상되는 함수의 이름을 지정하는 것은 그저 상처의 염분입니다.


"좋아하는 디버거는 무엇입니까?"
"좋아하는 프로파일 러는 무엇입니까?"

실제 애플리케이션 / ide / frontend는 "notepad, echo 및 microtime ()"을 넘어서는 한 그다지 중요하지 않습니다. 항상 완벽한 코드를 작성하는 개발자 10 억 명 중 한 명을 고용 할 가능성은 매우 낮으며, 그 / 그녀의 단위 테스트는 오류가 발생하기 전에 모든 오류와 병목 현상을 발견하여 코드를 프로파일 링하거나 단계별로 살펴보고 찾을 수있는 사람을 원합니다. 유한 시간에 오류. (아마 모든 언어 / 플랫폼에 해당되지만, 순전히 주관적으로 말하면 PHP 개발자들 사이에서 약간 저개발 된 기술인 것 같습니다)


Terry Chay는 기본적으로 모든 PHP 개발자가 알아야 할 사항과 취업 면접에서 어느 정도 답변해야 할 사항을 요약 한 블로그 게시물을 가지고 있습니다.

http://terrychay.com/article/php-coders.shtml

나는 그것의 훌륭한 요약이라고 생각한다.


나는 다음과 같이 묻고 싶다.

a) 캐싱은 어떻습니까?

b) 캐시는 어떻게 구성 할 수 있습니까?

c) 확실합니까, 추가 DB 쿼리를 수행하지 않습니까? (내가 PHP에서 만든 첫 번째 항목에서 foreach 내부의 mysql_query는 댓글을 작성한 사용자의 이름을 가져 오는 것입니다 ... 끔찍한 :))

d) register_globals가 왜 나쁜가요?

e) 왜 그리고 어떻게 코드에서보기를 분할해야합니까?

f) "구현"의 주요 목적은 무엇입니까?

몇 가지 기본적인 책을 읽은 후 전혀 명확하지 않은 질문이 있습니다. 웹에있는 수천 개의 FAQ를 통해 몇 일 \ 주 만에 주입 및 csx, strpos에 대한 모든 것을 알아 냈습니다. 그러나 이러한 질문에 대한 답을 찾을 때까지 내 코드는 정말 끔찍했습니다. :)


사용자 입력을 직접 출력해서는 안되는 이유!

에서 직접 데이터와 같은 것을 인쇄하면 GET XSS (크로스 사이트 스크립팅) 취약성이 발생할 수 있습니다 . 그렇기 때문에 항상 htmlspecialchars ()를 통해 클라이언트에서 입력을 먼저 보내야합니다.


차이점 설명

추출 ()

터지다 ()

내파 ()


다음 코드의 문제는 무엇입니까?

$a = 2;
function foo()
{
    $a = 3;
}
foo();
echo $a;

참고 URL : https://stackoverflow.com/questions/2118755/questions-every-good-php-developer-should-be-able-to-answer

반응형