워드프레스에서 액션의 개념
402
投稿した質問数 1
잘 보고 있습니다.
워드프레스 액션의 개념에서
do_action() 이 실행될 때
empty()를 넣어서 실제 키에 대한 배열이 존재하는지 여부를 체크하셨는데,
안하고 했더니 실제로 에러가 떨어지더라구요.
1) 왜 에러가 떨어졌을까요?
에러에는 빈 스트링이 전달되서 그렇다는데 어디에 그런 여지가 있는지 잘 모르겠더라고요.
2) 암튼 저는 중간에 체크코드가 있는게 싫어서 isset 으로 얼리리턴 하긴 했는데.. 이건 워드프레스 스타일이 아닌가요?
回答 1
0
안녕하세요. 질문 남겨 주셔서 감사합니다.
질문해 주신 부분은 아마 아래 코드와 관련된 부분이신 것 같습니다.
맞나요?
1. 검사를 하지 않으면 알림(notice) 메시지가 뜨는 이유
알림(notice)은 경고(warning)나 에러(error)와 달리 당장 고치지 않아도 별 문제가 발생하지는 않을 것으로 생각되는 것들에 대한 에러 메시지입니다. 그러나 향후 문제가 발생할 수 있기 때문에 해결하는 습관을 들이는 것이 좋습니다.
여기서 알림이 뜬 이유는 배열에 없는 인덱스(배열의 키값)에 접근하려고 했기 때문이죠.
액션 실행 지점을 코드에서 모두 설정은 해 놨지만, 실제로 실행 지점과 함수를 등록하지 않으면 액션 목록 배열에는 실행 지점이 존재하지 않습니다. 예컨대 아래 코드를 참고해 봅시다.
add_action('실행지점2', function () { /* ... */ });
do_action('실행지점1');
do_action('실행지점2');
do_action은 실행지점1과 실행지점2를 모두 실행하지만 실제로 함수가 등록된 것은 실행지점1에 대해서만입니다. 실행지점2에 대해서는 등록된 함수가 없습니다. 따라서 $action_list 배열에는 "실행지점2"라는 키값이 배정돼 있지 않습니다.
이런 상황에서 $action_list['실행지점2']에 접근하려고 하면 "어, 이 배열에 그런 인덱스는 없는데? 뭐 잘못한 거 아니니?" 하고 PHP가 알림(notice)를 띄워 주는 것입니다.
2. empty와 isset의 차이
그래서 우선 $action_list['실행지점2']가 존재하는가를 검사한 뒤에 해당 값에 접근을 하려고 하는 것인데요.
이 지점에서는 말씀해주신 대로 isset을 사용해도 무방합니다. 함수가 등록됐다면 해당 인덱스가 존재할 것이기 때문입니다.
empty가 워드프레스 스타일인 것도 아니기 때문에 isset을 사용하시는 데 아무 문제가 없습니다.
둘 사이 차이는 빈값에 대한 판단입니다. 아래 코드를 참고해 보세요.
$a = [];
!empty($a); // false
isset($a); // true
!empty(비어있지 않음 == 내용물 있음)와 isset(정의돼 있음)을 비슷한 맥락에서 사용하게 될 텐데요.
empty는 빈 값(빈 문자열, 빈 배열, 숫자 0 등 PHP가 false 취급하는 모든 값)에 대해서 true를 반환하고 !empty는 false를 반환합니다.
반면 isset은 변수가 설정만 돼 있다면 값이 무엇이든 상관하지 않고 true를 반환합니다.
따라서 내용물에 상관없이 변수가 설정돼 있는지를 검사하는 경우에는 isset을, 내용물이 실질적으로 존재하는지까지 검사할 때 !empty를 사용하시면 됩니다.
위 경우에는 코드 진행 흐름상 $action_list 배열의 인덱스가 존재하면 내용물도 존재하는 것이기 때문에 isset을 사용해도 별 문제가 없기는 합니다.
그러나 논리적으로 본다면 $action_list에서 호출한 액션 지점 index가 존재하는지 여부를 체크하는 것이 필요한 게 아니라, 해당 index에서 실행할 함수(즉, 내용물)가 존재하는지 체크하는 게 필요한 것이기 때문에 !empty를 사용하는 것이 의미상 더 맞는 것이죠.
마지막으로 얼리 리턴을 하게 하셨다고 했는데요. 코드 깊이를 깊게 만들지 않는다는 점에서 좋은 방법인 것 같습니다! 저도 그렇게 짤 것을 그랬네요!
답변이 되었다면 좋겠습니다. 혹시 추가로 궁금한 게 있다면 주저하지 마시고 질문 남겨 주세요 :)
감사합니다.
POST http://localhost/wordpress/wp-admin/admin-ajax.php 400 (Bad Request)
0
358
1
phpstorm에서 LIve server 기능을 사용하는 방법이 궁금합니다.
0
493
2
클랙식 테마를 운영 중 블럭 테마로 개편할 때
0
372
2
미디어에서 이미지 추가시 시간이 좀 느려서...
0
414
2
wp_editor ($editor_name) 관련
0
397
1
action-test.php 변경관련
0
485
1
APMsetup을 활용
0
436
1
미디어 라이브러리 작동안함문제
0
851
2
목차용 에디터 만들기 강좌에서
0
348
1
고유주소 설정을 바꾸면 글이 안 불러와져요.
0
416
1
JetBrains에서
0
441
3
5:30초 부분 결과값이 bool(false)로 나오는 문제
0
325
1
새 페이지 추가 - 고유주소 변경
0
353
1
the_post가 없으면 무한 루프에 관하여 질문이 있습니다
0
362
1
데이터베이스 선택불가
0
924
3
책 목록 만들기와 아카이브 링크
0
396
2
register_post_type() error
0
280
1
미디어 창에 여러 이미지를 선택하고 렌더링하는 방법
0
273
1
테이블을 직접 만들고 사용하는 방법 문의
1
391
1
수업내용같이 같은 함수를 썼지만 배열을 넣을 수 없습니다 어떤오류인가요?
0
292
2
안녕하세요, 질문드립니다!
0
292
1
안녕하세요
0
234
1
초보질문입니다..
0
353
1
중간중간 수정하시는 과정을 볼 수 있어서 좋네요. 생각하시는 과정을 볼 수 있어 좋은 것 같습니다.
0
146
0

