PHP 객체 지향 프로그래밍 (OOP)에서 end () 함수는 겉보기에 간단한 배열 작동 기능이지만 일부 시나리오에서 쉽게 감지 할 수없는 문제를 일으킬 수 있습니다. 그 목적은 배열의 내부 포인터를 마지막 요소로 이동하고 해당 요소의 값을 반환하는 것입니다. 그러나 객체 지향적 인 맥락에서주의를 기울이지 않으면 예상치 못한 행동으로 이어질 수 있습니다.
우선, end () 는 전달 된 배열에서 참조로 작동하는 함수임을 분명히해야합니다. 배열의 내부 포인터 위치를 변경합니다. 이는 다음을 의미합니다.
$items = ['apple', 'banana', 'cherry'];
echo end($items); // 산출 cherry
이것은 그 자체로는 문제가되지 않지만 OOP에서는 객체 메소드 내부의 클래스의 특정 속성 (배열)에서 end ()를 사용하면 객체의 상태에 실수로 영향을 줄 수 있습니다.
예를 들어, 다음과 같이 수업이 있다고 가정합니다.
class Cart {
private array $items = ['apple', 'banana', 'cherry'];
public function getLastItem() {
return end($this->items);
}
public function currentItem() {
return current($this->items);
}
}
getLastItem ()을 호출 한 다음 currentItem ()을 호출하는 경우 :
$cart = new Cart();
echo $cart->getLastItem(); // 산출 cherry
echo $cart->currentItem(); // 산출 cherry(아니요 apple!)
이것은 당신이 예상 한 행동이 아닐 수도 있습니다. end ()가 내부 포인터의 위치를 변경하기 때문에 current ()는 현재 포인터 위치의 값을 취합니다. 이러한 "부작용"은 복잡한 비즈니스 논리에서 버그를 유발할 수 있습니다.
더 안전한 접근법은 Array_Slice ()를 사용하여 내부 포인터에 영향을 미치지 않고 마지막 요소를 얻는 것입니다.
class Cart {
private array $items = ['apple', 'banana', 'cherry'];
public function getLastItemSafe() {
$last = array_slice($this->items, -1);
return $last[0] ?? null;
}
}
이 방법은 $ 항목 의 내부 포인터 상태를 수정하지 않으며 상태 제어 요구 사항이 높은 객체 모델에 적합합니다.
URL 데이터를 다루는 경우 end ()를 사용하는 컨텍스트에주의를 기울여야합니다. 예를 들어:
class UrlManager {
private array $paths = [
'https://m66.net/home',
'https://m66.net/about',
'https://m66.net/contact'
];
public function getLastPathSegment() {
$url = end($this->paths);
$parts = explode('/', parse_url($url, PHP_URL_PATH));
return end($parts);
}
}
이 클래스는 마지막 URL의 마지막 경로 세그먼트를 올바르게 제거 할 수 있지만 참고 : END () 의 사용은 각 배열의 포인터 위치를 변경합니다. $ this-> 경로에 여전히 다른 곳의 현재 포인터에 의존하는 논리가 있다면 문제가 발생할 수 있습니다.
더 안전한 작문 방법은 End ()를 직접 사용하여 클래스 속성의 원래 배열 구조를 수정하거나 매개 변수로 전달됩니다.
end ()는 부작용이있는 배열의 내부 포인터를 변경합니다.
OOP에서 객체 속성은 의도하지 않은 상태로 변경 될 수 있습니다.
array_slice ()를 사용하거나 end () 대신 인덱스를 수동으로 계산하여 마지막 요소를 얻을 수 있습니다.
URL, 파일 경로 또는 복잡한 데이터 구조를 처리 할 때 특히주의하십시오.
실제로 end ()를 사용해야하는 경우 클래스 속성에 직접 행동하지 않고 작동하기 전에 배열 복사 우선 순위를 정하십시오.
end () 의 올바른 이해와 사용은보다 안정적이고 유지 관리 가능한 OOP 코드를 작성하는 데 도움이 될 수 있습니다.