본문 바로가기

PHP95

[PHP] __clone() 메소드: 객체 복사 시 발생하는 문제와 해결법 안녕하세요, 오늘은 __clone() 메소드를 활용해서 객체 복사 시, 원본 객체와 복제된 객체가 독립되지 않는 문제를 해결해보도록 하겠습니다. __clone() 메소드 PHP에서 clone 키워드를 사용해 객체를 복사할 때, 대부분의 개발자는 완전히 독립된 새로운 객체가 생성될 것이라 기대합니다. 하지만 예상과 다르게 동작할 때가 있습니다.기본적으로 PHP의 clone은 얕은 복사(Shallow Copy)를 수행합니다.이는 객체 내부의 프로퍼티가 또 다른 객체를 참조하고 있을 경우, 그 참조(주소값)만 복사하기 때문입니다.결국, 원본 객체와 복제된 객체가 내부의 동일한 객체를 공유하게 되는 문제가 발생합니다. 이 문제를 해결하고, 내부 객체까지 모두 복제하여 완전한 독립을 보장하는 깊은 복사(Dee.. 2025. 9. 19.
[PHP] 상속(extends)을 사용하기 PHP로 객체 지향 프로그래밍을 하다보면 비슷한 기능과 속성을 가진 클래스를 만들어야 할 때가 있습니다.이번 예제는 강아지 클래스, 고양이 클래스 만들고 속성과 행동을 만들어 보겟습니다. 공통의 기능을 수정해야 할 때 관련된 클래스를 일일이 수정하는 불편함을 줄여줍니다. 그럼 상속은 무엇일까요?부모 클래스의 속성, 행동을 자식 클래스가 물려받아 사용 할 수 있게 하는 기능입니다.자식클래슨느 부모의 모든 것을 물려받아 자신만의 새로운 기능을 추가하거나 물려받은 기능을 자신에게 맞게 재정의(오버라이딩)을 할 수도 있습니다. 예제코드class Animal{ public $name; public function __construct($name) { $this->name = $name.. 2025. 9. 15.
[PHP] nullsafe 연산자 (?->): null 체크 지옥에서 벗어나기 안녕하세요. 오늘은 'null 체크 지옥'에서 벗어날 수 있는 nullsafe 연산자에 대해 알아보겠습니다. nullsafe 연산자 PHP로 객체 지향 프로그래밍을 하다 보면, 객체의 프로퍼티나 메소드를 연쇄적으로 호출하는 경우가 많습니다.하지만 이 체인 중간에 하나라도 null이 있다면, PHP는 치명적인 오류(Fatal Error)를 발생시킵니다. 이런 오류를 막기 위해 우리는 보통 if와 isset()으로 길고 지저분한 조건문을 작성해야 했습니다.바로 'null 체크 지옥'입니다. PHP 8.0부터 도입된 nullsafe 연산자 (?->)는 이 문제를 해결해줍니다. 연쇄 호출 중간에 null을 만나면, 더 이상 다음 코드를 실행하지 않고 즉시 null을 반환하여 오류 없이 안전하게 코드를 중.. 2025. 9. 12.
[PHP] strtotime()으로 자연어 날짜 처리하기 이번달의 마지막날은 언제이지?, 다음주 월요일 날짜를 구해야해! PHP로 날짜를 계산하다 보면 이런 요구사항들을 자주 만나게 됩니다. DateTime 객체를 사용하거나 직접 날짜를 계산하는 방법도 있지만, 간단하게 해결할 수 있는 함수가 있습니다. 바로 strtotime() 입니다. strtotime()은 String To Time 의 약자로 사람이 이해 할 수 이는 날짜/시간 형식의 문자열을 유닉스 타임스탬프로 변환합니다. 예제// 'now'는 현재 시간을 의미합니다.$now_timestamp = strtotime("now");echo date("Y-m-d H:i:s", $now_timestamp); // 예: 2023-10-27 15:10:00echo "";// 특정 날짜 문자열을 타임스탬프로 변환$.. 2025. 9. 9.
[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.