모든 좋은 PHP 개발자가 대답할 수 있는 질문
나는 모든 좋은 질문들을 훑어보고 있었다.Net Developer는 대답할 수 있어야 하며, 이 질문의 내용과 접근법에 매우 감명받았습니다.그래서 저는 같은 정신으로 PHP Developer에게 이 질문을 합니다.
훌륭한 PHP 프로그래머가 어떤 질문에 대답할 수 있어야 한다고 생각하십니까?
편집 : 이 질문은 사용자 고유성이 없고 프로그래밍 커뮤니티 전체에 서비스를 제공하기 위한 것이므로 커뮤니티 Wiki로 표시합니다.
좋은 답변 기다리겠습니다.
메모: 사람들이 언어에 대해 새로운 것을 배울 수 있도록 댓글에 제시된 질문에도 답해 주십시오.
물론 이 질문은 다른 곳에서 훔쳤지만(어디서 읽었는지 기억이 나지 않는다) 재미있다고 생각했다.
Q: 무엇이T_PAAMAYIM_NEKUDOTAYIM
A: 스코프 분해능 연산자(이중 콜론)입니다.
경험이 많은 PHP'er는 그것이 무엇을 의미하는지 즉시 알 수 있습니다.경험이 적은(히브리어가 아닌) 개발자는 이 내용을 읽고 싶어할 수 있습니다.
하지만 이제 더 심각한 질문이 있습니다.
Q: '경고: 헤더 정보를 수정할 수 없습니다 - 헤더는 이미 전송되었습니다'라는 경고의 원인은 무엇이며, 이를 방지하기 위한 좋은 방법은 무엇입니까?
A: 원인: 본문 데이터가 전송되어 헤더도 전송되었습니다.
예방:본문 데이터를 출력하기 전에 헤더 고유의 코드를 먼저 실행해야 합니다.실수로 공백이나 다른 문자를 보내지 않도록 하십시오.
Q: 이 쿼리의 문제점은 무엇입니까?"SELECT * FROM table WHERE id = $_POST[ 'id' ]"
A:1. SQL 주입에 취약합니다.쿼리에서 사용자 입력을 직접 사용하지 마십시오.일단 소독부터 하세요.사전 준비문(PDO) 2.모든 열(*)을 선택하지 말고 모든 열을 지정합니다.이는 주로 미래에 BLOB 열이 추가될 때 쿼리가 메모리를 차지하지 않도록 하기 위한 것입니다.
Q: 이 if 문장의 문제점은 무엇입니까?if( !strpos( $haystack, $needle ) ...
:: strpos
$120을 처음 이는 $120의 값일 수 .이 위치는 다음과 같습니다.0
.부터0
false
해결책은 엄격한 비교를 사용하는 것입니다.if( false !== strpos( $haystack, $needle )...
Q: 이 if 스테이트먼트를 작성하기 위해 권장되는 방법은 무엇이며, 그 이유는 무엇입니까?
if( 5 == $someVar )
★★★★★★★★★★★★★★★★★」if( $someVar == 5 )
A: 전자는 2개의 등호를 사용하는 것을 잊어버렸을 때 실수로 $someVar를 5에서 $someVar로 할당하는 것을 방지합니다($someVar = 5
에러가 발생하지만, 후자는 발생하지 않습니다.
Q: 다음 코드가 지정됩니다.
function doSomething( &$arg )
{
$return = $arg;
$arg += 1;
return $return;
}
$a = 3;
$b = doSomething( $a );
의인가...의치치 엇엇? ???$a
★★★★★★★★★★★★★★★★★」$b
능능 호호 ?유 ??? ?? ???
:: $a
4
★★★★★★★★★★★★★★★★★」$b
3
전자는 $arg가 참조에 의해 전달되기 때문에, 후자는 함수의 반환값이 인수의 초기값이 (참조가 아닌) 복사이기 때문입니다.
OOP 고유의
Q: 다음 두 가지 차이점이 무엇입니까?public
,protected
★★★★★★★★★★★★★★★★★」private
래스정??? ??
:: 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에서는 메서드의 예상되는 반환 유형을 정의할 수 없습니다.이것에 의해, 인터페이스는 거의 무효가 됩니다. :-P
확실한 보안 질문입니다!
(물론 php 웹 어플리케이션 보안은 훨씬 복잡합니다.)
- SQL 주입에 어떻게 대처합니까?
mysql_real_escape_string()을 지정합니다.그런 다음 PDO를 학습하여 데이터베이스 벤더 간에 준비된 문장과 이식성을 활용합니다.
- CSRF(Cross-Site Request Formature)에 대처하는 방법
중요한 작업을 보호하기 위해 모든 중요한 요청에 토큰을 추가합니다(사용자는 중요한 요청을 보내기 전에 양식을 확인해야 합니다).
- XSS(Cross-Site Scripting)를 반영하여 저장하는 방법
처음에 htmlentities()가 좋습니다.
- XXX 주입의 종류: LDAP 주입, XPath 주입 등...
XXX가 사용하는 「어휘」를 알고 나서, 삭제나 「체크 앤 거부」에 필요한 것을 제외해 둘 필요가 있습니다.
- 합리적인 기능의 목록은 무엇입니까?
PHP 코드를 해석하거나(원격 파일에 포함될 수 있음) 시스템에서 명령을 실행하는 함수입니다.짧은 리스트와 불완전한 리스트는 exec(), pussal(), system(), popen(), eval(), preg_replace() 등입니다.
- 파일 포함 위험에 어떻게 대처합니까?
- 패스 횡단이란 무엇입니까?
- 파일 업로드와 관련된 위험은 무엇입니까?
파일 또는 원격 리소스를 열 때 사용되는 매개 변수를 주의 깊게 확인해야 합니다.
- PHP 구성을 강제하는 방법(즉, php.ini의 용도를 알고 계십니까?)
시간이 오래 걸리기 때문에 답변을 생략하고 PHP 매뉴얼을 읽어주세요.
- 사용자 데이터 필터링에 대해서: sanitizing과 check-and-filtering의 차이점은 무엇입니까?
첫 번째는 침입을 덜 적대적인 것으로 바꿔놨어요두 번째 항목은 입력이 올바른지 확인하고, 그렇지 않으면 거부합니다.
"왜 다른 거 안 써?"
죄송합니다.누군가가말해야합니다.:)
php는 크로스 브라우저입니까?
(이것이 많은 사람들을 끌어모으는 것을 알지만, php 포럼에서 더 흥미로운 질문입니다.)
좋은 질문은 HTTP의 구조입니다.작업GET
★★★★★★★★★★★★★★★★★」POST
다른 HTTP 통신들 중에서 데이터는 PHP 개발에 내재되어 있습니다.HTTP가 보다 넓은 컨텍스트에서 어떻게 동작하는지, 그리고 PHP가 어떻게 이것을 구현하는지 이해하는 것은 큰 도움이 됩니다.
==와 ===의 차이점은 무엇이며 ==를 사용하려는 이유는 무엇입니까?
가 왜 ''로 표시되는지 .2.5
3
:
$a = 012;
echo $a / 4;
답변: 숫자 앞에 a가 붙는 경우0
PHP에서는 이 숫자는 8진수(base-8)로 취급됩니다.따라서 8진수012
10을 10
.
아직 아무도 그것에 대해 언급하지 않았지만, 이것은 모든 PHP 개발자가 길게 말할 수 있는 것이다.?는 왜?register_globals
나쁜가요?
php를 사용하여 사이트를 개발했는데 완전히 엉터리일 경우, 다음과 같은 문제가 발생합니다.
a) PHP 장애
b) 프로그래머 장애
사용자 입력을 회피하기 위한 베스트 프랙티스는 무엇입니까?(이 질문은 자주 나오는 것 같습니다)
$array의 "name" 요소를 호출할 때 올바른 것은 무엇입니까?
$array[name]
$array['name']
둘 다 자주 작동하지만 인용된 형식만 정확합니다.
define('name', 0);
벌레가 날아다니는 걸 보고.네, 이렇게요.폼 요소를 어레이로 전송하려면 어떻게 해야 합니까?
multiple 'multiple'에 빈 를 추가합니다.
<input type="checkbox" name="checkboxes[]" />
"서버의 배열").$_POST['checkboxes'][0..n]
하지 않지만 100% PHP를 통해 것보다$_POST
한 한'checkboxes'.$i
★★★★★★ 。mysql_, mysqli_ 또는 PDO?
여기서 유일하게 잘못된 답은 mysql_ 라이브러리는 준비된 스테이트먼트를 하지 않으며 더 이상 악의 용량을 변명할 수 없다는 것입니다. 번 함수의 이름을 "이러다"가 됩니다
mysql_real_escape_string()
그냥 상처에 소금일 뿐이야.
는요?'''
"" "" "" "" ""?
"notepad, echo, microtime()"을 넘어서는 한 실제 애플리케이션/아이디어/프런트엔드는 그다지 중요하지 않습니다.10억 명 중 한 명은 항상 완벽한 코드를 작성하는 개발자를 고용할 가능성이 매우 낮습니다.또, 그 유닛의 테스트에서는, 에러나 병목 현상이 발생하기 전에 모든 에러나 보틀 넥을 검출해, 코드를 프로파일 하거나 스텝 해, 한정된 시간에 에러를 찾아낼 수 있는 사람이 필요하게 됩니다.(그것은 아마 모든 언어/플랫폼에 해당하지만, 나에게는 완전히 주관적으로 말하면 php 개발자들 사이에서는 조금 부족한 기술인 것 같습니다.)
Terry Chay는 기본적으로 모든 PHP 개발자가 알아야 할 것 및/또는 취업 면접에서 어느 정도 답변해야 할 것을 요약한 블로그 투고를 가지고 있다.
http://terrychay.com/article/php-coders.shtml
훌륭한 요약이라고 생각합니다.
이렇게 물어보고 싶어요
a) 캐싱은 어떻습니까?
b) 캐시는 어떻게 구성됩니까?
c) 추가 DB 쿼리를 실행하지 않으시겠습니까?(제가 PHP로 작성한 첫 번째 작업에서는 코멘트를 작성한 사용자의 이름을 얻기 위한 mysql_query interforeach였습니다.무시무시한 :)
d) register_productals가 나쁜 이유는 무엇입니까?
e) 코드에서 뷰를 분할하는 이유와 방법
f) "유도"의 주요 목적은 무엇입니까?
여기 기본적인 책들을 읽은 후 전혀 이해가 가지 않는 질문들이 있다.주입과 csx, strpos에 대한 모든 것을 웹상의 수천 개의 FAQ를 통해 며칠 사이에 알게 되었습니다.하지만 이 질문들에 대한 답을 찾을 때까지 제 코드는 정말 끔찍했습니다:)
사용자 입력을 직접 출력하면 안 되는 이유!
GET에서 직접 데이터를 인쇄하면 사이트 간 스크립팅(XSS) 취약성이 발생할 수 있습니다.따라서 항상 클라이언트로부터의 입력을 htmlsspecialchars() 경유로 송신해야 합니다.
의 차이점을 설명하다
추출()
폭발()
incomode()
다음 코드에 무슨 문제가 있나요?
$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
'programing' 카테고리의 다른 글
MariaDB: 수십억 개의 레코드를 갱신하는 최적의 방법 (0) | 2023.01.02 |
---|---|
'모듈 가져오기' 또는 '모듈 가져오기'를 사용하시겠습니까? (0) | 2023.01.02 |
Java와 C/C++ 간의 프로세스 간 통신을 위한 가장 빠른(저레이텐시) 방식 (0) | 2022.12.28 |
mysql 날짜별 합계 그룹 선택 (0) | 2022.12.28 |
하위 프로세스의 출력을 저장합니다.콜을 문자열로 팝업하다 (0) | 2022.12.28 |