본문 바로가기

PHP118

[PHP] switch 문을 대체하는 match 표현식 안녕하세요. 오늘은 switch 문을 대체하는 match 표현식 에 대해 알아보겠습니다. PHP 8.0부터 switch 문을 더욱 안전하고 간결하게 사용할 수 있는 match 표현식이 등장했습니다.switch와 비슷해 보이지만, 몇 가지 핵심적인 차이점이 있습니다. 엄격한 타입 비교: switch가 == (느슨한 비교)를 사용하는 반면, match는 === (엄격한 비교)를 사용해 타입까지 정확하게 비교함. 이로 인해 예상치 못한 버그 줄일 수 있음값을 반환하는 '표현식': match는 그 자체가 값을 반환할 수 있어, 결과를 변수에 바로 할당할 수 있음. 코드가 훨씬 간결해짐.break가 필요 없음: 각 조건은 암시적으로 break가 걸려있어, 아래 조건으로 넘어가는 실수를 원천적으로 방지함.여러 .. 2025. 9. 5.
[PHP] strpos(), strrpos()로 특정 문자의 위치 찾기 PHP로 프로그래밍을 할 때, 특정 문자열 안에서 원하는 단어나 문자가 포함되어 있는지, 그리고 만약 포함되어 있다면 어느 위치에 있는지를 알아내야 하는 경우가 있습니다. strpos()는 string position의 약자로, haystack(검색 대상 문자열)에서 needle(찾을 문자열)이 처음으로 나타나는 위치(인덱스)를 반환합니다. 예제코드$sentence = "I love PHP, I love PHP too!";// "PHP"라는 단어가 처음 나오는 위치를 찾습니다.$position = strpos($sentence, "PHP");echo "문장: " . $sentence . "";echo "'PHP'의 첫 위치: " . $position;?> 시연화면 strrpos()의 r은 Reverse를.. 2025. 9. 1.
[PHP] 일반 배열보다 빠르고 메모리를 적게 쓰는 SplFixedArray 안녕하세요. 오늘은 일반 배열보다 빠르고 메모리를 적게 쓰는 SplFixedArray에 대해 알아보겠습니다. SplFixedArraySplFixedArray는 SPL(Standard PHP Library)에서 제공하는 "고정 크기 배열"입니다. 일반적인 PHP 배열과 가장 큰 차이점은 처음 생성할 때 크기를 미리 지정해야 하고, 한 번 정해진 크기는 변경할 수 없다는 점입니다. SplFixedArray의 장점은 다음과 같습니다. 더 빠른 속도 : PHP 내부적으로 크기를 계속 확인하고 동적으로 메모리를 재할당할 필요가 없어 일반 배열보다 인덱스 접근 속도가 더 빠름적은 메모리 사용 : 각 요소가 차지할 공간이 미리 정확하게 계산되므로, 유연성을 우해 추가 공간을 확보하는 일반 배열에 비해 메모리를 훨.. 2025. 8. 31.
[PHP] parse_str()과 http_build_query()로 쿼리 스트링 파싱 및 생성하기 웹 개발을 하다 보면 URL 뒤에 붙는 ?key1=value1&key2=value2 형태의 쿼리 스트링(Query String)을 다룰 일이 많습니다. 예를 들어, 다른 페이지로 데이터를 전달하거나, API에 요청을 보낼 때 파라미터를 이 형태로 구성합니다. parse_str() 함수는 URL의 쿼리 스트링과 같은 문자열을 PHP 변수나 배열로 분해해주는 함수입니다. 예제코드$query_string = "name=John+Doe&age=30&city=Seoul";// 1. 결과를 담을 빈 배열을 미리 선언합니다.$params = [];// 2. parse_str()의 두 번째 인자로 배열 변수를 넘겨줍니다.parse_str($query_string, $params);// 3. 이제 생성된 변수가 아닌, .. 2025. 8. 29.
[PHP] range() + array_filter()로 짝수/홀수 필터링하기 안녕하세요. 오늘은 range()함수와 array_filter() 함수를 활용하여 숫자 배열을 만들고 짝수/홀수를 필터링 해보겠습니다. range(start, end, step)지정한 범위의 숫자 배열을 생성합니다. - range(1, 10) → [1,2,3,4,5,6,7,8,9,10] - range(0, 20, 5) → [0,5,10,15,20] array_filter(array, callback)배열의 각 요소를 순회하며 콜백 함수의 조건에 맞는 값만 필터링해서 반환합니다. - 짝수만 필터링 → $n % 2 === 0 - 홀수만 필터링 → $n % 2 !== 0 예제 코드입니다. ";print_r($numbers);// 짝수만 필터링$even = array_filter($numbers, functi.. 2025. 8. 24.
[PHP] explode()와 implode()로 문자열을 배열로, 배열을 문자열로 변환하기 PHP 개발을 하다 보면 콤마(,)나 다른 구분자로 연결된 하나의 긴 문자열을 다뤄야 할 때가 많습니다. 예를 들어, 사용자가 입력한 태그 데이터("PHP,JSP,ASP,JavaScript")나 CSV 파일의 한 줄 같은 데이터가 있습니다. 반대로, 배열에 담긴 여러 데이터를 하나의 문자열로 합쳐서 데이터베이스에 저장하거나 화면에 출력해야 할 경우도 많습니다. 이럴 때 사용할 수 있는 explode()와 implode()에 대해 알아보겠습니다 explode() 함수는 특정 구분자를 기준으로 문자열을 잘라 배열(array)로 만들어주는 함수입니다. explode(string $separator, string $string, int $limit = PHP_INT_MAX): array $separator: 문.. 2025. 8. 23.
[PHP] 날짜 및 시간 객체 선언하여 다루기 웹 애플리케이션 개발에서 날짜와 시간은 로그인 기록, 게시물 작성 시간, 예약 시스템 등 거의 모든 곳에서 사용되는 중요한 요소입니다. PHP는 날짜와 시간을 다루는 다양한 방법을 제공하지만, 그중에서도 DateTime 객체는 복잡한 날짜 연산을 쉽게 만들어줍니다. 그럼 어디에 사용하면 좋을까요?데이터의 무결성 및 정확성 보장: 로그 및 감사 추적: 누가, 언제, 무엇을 했는지 정확히 기록해야 시스템의 보안을 강화하고 문제 발생 시 원인을 파악할 수 있습니다. 데이터 정합성: 게시물, 댓글, 주문 등 모든 데이터는 생성 시점 정보가 있어야 일관성 있게 관리될 수 있습니다. 비즈니스 로직 구현: 할인 기간, 이벤트 종료일: 특정 기간에만 적용되는 프로모션이나 이벤트의 시작/종료 시점을 정확히 제어해야 합니.. 2025. 8. 10.
[PHP] get_defined_vars() 함수로 정의된 변수 확인하기 안녕하세요. 오늘은 get_defined_vars() 함수를 활용하여 현재 스크립트에서 정의된 모든 변수를 확인해보도록 하겠습니다. get_defined_vars()현재 범위(Scope)에서 정의된 모든 변수와 그 값을 연관 배열(associative array) 형태로 반환합니다.전역 변수, 지역 변수, 슈퍼글로벌($_GET, $_POST 등)까지 포함됩니다. 반환값은 변수 이름을 key로, 변수 값을 value로 가지는 배열입니다.이 배열을 print_r() 또는 var_dump()를 사용해 출력하면, 현재 사용 가능한 모든 변수를 한눈에 확인할 수 있습니다. 예제코드 // 변수 정의$name = "Alice";$age = 25;$is_admin = true;// 함수 예제function show.. 2025. 8. 9.
[PHP]debug_zvfal_dump()로 PHP 내부 동작 엿보기 안녕하세요,오늘은 PHP의 값 복사 vs 참조 동작을 이해할 수 있는 debug_zval_dump()에 대해 알아보겠습니다. debug_zval_dump()debug_zval_dump()는 PHP에서 변수의 내부 구조를 덤프(dump) 하면서, 해당 값이 몇 개의 변수에 의해 참조되고 있는지까지 보여주는 디버깅 함수입니다. 보통은 우리가 $a = 'hello'; $b = $a;처럼 코드를 작성하면,값이 그냥 복사되는 것처럼 보이지만, 실제로 PHP는 복사를 지연시키고,참조(refcount)를 늘려서 성능을 최적화합니다. 이 함수는 아래 상황에 유용합니다. 값이 복사되는 시점(= 실제 메모리 할당 시점)을 알고 싶을 때참조로 인해 값이 어디까지 연결되어 있는지 확인하고 싶을 때PHP가 copy-on-w.. 2025. 7. 26.