PHP/Modern PHP

[PHP] PHP 면접 질문 정리

DSeung 2023. 12. 8. 12:04

 

Q : 접근 제어자 public, private, protected의 차이

A : public은 어디서나, private는 같은 클래스에서, protected는 같은 클래스 및 자식 클래스에서 접근 가능


Q : PSR은 무엇인가?

A : php를 작성하기 위한 규칙, 코딩 스타일 가이드 권장 가이드, 버전마다 가이드가 다르므로 기존 가이드를 유지하는 게 좋음


Q : php 프레임워크 사용 경험, 장단점

A : Laravel 프레임워크를 주로 사용했고 CMS인 워드프레스가 있음

Laravel 간단한 코드로 강력한 웹 애플리케이션을 개발할 수 있는 PHP계의 스프링!
wordpress 간단하게 CMS 사이트를 만들 수 있으며 더 깊게 파고들어서 테마 및 플러그인을 적용 및 개발을 PHP로 가능

Q : Null coalescing operator 사용 방법

A : 키워드가 ??인 이항 연산자로 다음 코드는 $_GET['user'] 값이 없으면 'guest'를 $user에 저장

$user = $_GET['user'] ?? 'guest'

Q : static는 무엇인가

A : Class 내에서 정적 함수 앞에 static 키워드를 붙여서 선언하면 Class의 Instance 없이 바로 호출할 수 있다


Q : PHP에서의 참조란

A : C나 Go의 포인터와 비슷한 개념으로 메모리 주소 공간을 같이 사용할 수 있다,  &키워드를 사용해 주소를 표시


Q: 세션과 쿠키의 차이

A : 쿠키는 로컬에 필요한 데이터를 저장하고 서버의 처리가 필요하지 않기에 속도가 빠르다
세션은 서버에 저장하며 로컬에 SESSION ID를 쿠기로 저장하고 서버는 클라이언트마다의 세션을 갖기에 부하가 생김

 


Q : 게시판의 조회수 기능을 구현하는 방법

A : 보편적인 방법으로는 쿠키와 세션이 있다.
- 세션은 비교적 보안이 좋지만 서버에 저장하기 때문에 서버에 부하가 생김
- 쿠키는 서버의 공간을 절약하지만 비교적 보안이 취약하며 사용자가 임의로 제거할 수 있다.

이 값을 이용해 게시글 번호나 사용자 정보를 담아서 구분할 수 있다.


Q : fopen() 함수에 대해서 설명

A : filename이 지정한 파일을 엽니다, 성공 시 resource를 반환하고 실패하면 false를 반환


Q : include(), require(), include_once(), require_once() 차이

A : include는 호출될 때 파일을 포함시키며 파일이 없더라도 코드가 계속 실행
require는 무조건 파일을 포함시키며 파일이 없다면 Fatal Error로 코드가 실행되지 않음.

once가 추가되면 해당 파일을 오직 한번만 추가한다는 옵션을 추가하는 의미


Q : 2차원 배열에서 키값(문자)으로 값을 찾는 법

A : array_column으로 컬럼 배열을 찾고 array_search로 키 값을 통해 찾을 수 있다

array_search('찾으려는 값', array_column('값을찾으려는 배열', '찾을 컬럼'))

Q : 연산자 ==, === 의 차이

A : ==는 형변환해서 값이 같으면 참, ===는 지금 값의 데이터 타입이 같아야 참


Q : sql 인젝션을 대비한 php 방법

A : mysqli_real_escape_string 같은 기본 내장 함수로 체크하는 방법이 있지만
멀티바이트 환경에서는 우회 방법이 존재하므로 특수문자 필터링이 필요하다이

때 직접 필터링을 넣을 수도 있고 filter_var를 사용할 수도 있음


또는 PDO의 prepare 기능을 사용하면 기본적으로 해줌


Q : php 객체와 배열의 차이점

A : 아래와 같다

- 배열은 키, 인덱스로 접근하고 비슷한 데이터가 담음
- 객체는 프로퍼티로 접근하고 관련된 정보를 저장하며 메서들 호출 


Q : 문자열에서 마지막 글자를 제거하고 싶을 때

A : replace, slice 등으로 문자열을 바꿀 수 있음


Q : php 장단점

장점

- 낮은 개발 장벽, 넓은 생태계
- 오픈소스
- 대부분 운영체제에서 돌아감
- 인터프리터이므로 바로 결과를 받을 수 있음

단점

- PHP 8.2 등으로 개선된 성능이 시장에 알려지지 않음
- 웹 개발 특화, 과거의 스파게티 코드 존재


Q : php의 현재 버전

A : 마지막 버전이 8.2.12로 알고 있음

https://www.php.net/releases/index.php

 

PHP: Releases

The most recent branches to reach end of life status are: 8.0: 3 Aug 20237.4: 3 Nov 2022

www.php.net


Q : Modern php란

A : Modern PHP는 과거의 PHP 이미지에서 벗어나기 위한 것으로 아래 규칙들을 지켜야 함


- 최신버전의 PHP
- PSR(표준권고) 준수
- 패키지 매니저(Composer) 사용


Q :  PHP 다중 상속을 지원 여부

A : JAVA와 같이 다중 상속을 지원하지 않는다
이유로는 다이아몬드 문제와 같이 클래스간의 관계를 파악하기 어려워지는 걸 피하기 위함


Q : PHP 슈퍼 전역 변수

A : global 키워드로 전역변수를 지정할 수 있으며 아래와 같은 미리 정의된 슈퍼 글로벌을 제공

$GLOBALS // 전역 변수를 저장하는 슈퍼 글로벌 변수 
$_SERVER // 현재 실행 중인 PHP 스크립트에서 관련된 서버 및 실행 환경에 대한 정보를 저장
$_GET // HTML의 FORM이 보낸 GET 정보를 저장
$_POST // HTML의 FORM이 보낸 POST 정보를 저장
$_FILES // 클라이언트가 웹 양식을 통해 서버에 업로드한 파일 정보를 저장
$_COOKIE // 클라이언트에 저장된 쿠키를 가져오거나 설정할 수 있게 쿠키 정보를 저장
$_SESSION // 세션 데이터 정보를 저장
$_REQUEST // 클라이언트의 요청을 저장
$_ENV // 서버 환경 변수 저장

Q : PHP 스코프 연산자

A : parent로 부모 클래스에 접근할 수 있고, self로 본인 클래스에 접근할 수 있음


Q : PHP 가비지 컬랙션

A : PHP 5.3에 추가된걸로 메모리 관리법, 강제로 수집할 수 있고 가비지 수집 메커니즘을 켜거나 끌 수 있음


Q : PDO는 무엇인가

A : PHP에서 데이터베이스에서 접속할 때 여러가지 처리하기 위한 메서드를 모은 클래스


Q : PHP 상수 선언

A : define 함수를 사용하거나 클래스 내에서 const 키워드로 선언할 수 있음

반응형