모든 좋은 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
, protected
및 private
클래스 정의에서?
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 통신 간의 작업 GET
및 POST
데이터는 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;
'ProgramingTip' 카테고리의 다른 글
방금 호출 한 오류의 줄 번호를 인쇄하는 Golang 프로그램을 어떻게 얻었습니까? (0) | 2020.10.18 |
---|---|
virtualbox 원시 모드는 Hyper-V Windows 10에서 사용할 수 없습니다. (0) | 2020.10.18 |
Firefox 기록으로 돌아 가면 JavaScript가 실행되지 않습니다. (0) | 2020.10.18 |
gitlab 개인 저장소에서 npm 모듈 설치 (0) | 2020.10.18 |
UIViewController의 뷰를 서브 뷰로 추가하는 방법 (0) | 2020.10.18 |