php 배열에 관한 질문입니다 ^^ 정보
php 배열에 관한 질문입니다 ^^관련링크
본문
안녕하세요 그누보드 고수님들!
php 초보가 그누보드의 원론적인(?) 부분을 공부하다가 배열에 관한 궁금증이 있어서 이렇게 질문을 드립니다.
보통 그누보드를 사용할때 DTD위에
<?
$g4_path="g4";
include_once("g4/common.php");
include_once("$g4[path]/lib/latest.lib.php");
.
.
?>
이런식으로 Heading Code를 작성하게 됩니다.
그런데 $g4_path가 어째서 2줄 뒤에는 $g4[path] 로 변수명이 변하는가에 대한 궁금증이 생겼습니다.
그래서 조금 배운 스크립트언어의 특징을 생각해서 '아 중간에 common.php 에서 어떤 처리가 이루어지겠지' 하고
common.php 를 뜯어본 결과, (필요하신분들을 위해 링크주소에 해당파일주소를 기재했습니다.)
212 : $g4 라는 변수를 배열로 선언하고 ( $g4 = array(); )
217~ 219 : 인젝선방지를 위한 코드를 지나
220 : DTD위에 선언한 $g4_path 를 $g4['path'] 에 담아주고 ( $g4['path'] = $g4_path; )
223 : $g4_path는 해제를 해라 ( unset($g4_path); )
라는 것까지는 이해를 했습니다.
그런데 여기서 $g4['path'] 가 $g4[path] 로 한번 더 변화를 해야 할텐데 이 과정에 대한 특별한 코드가 없길래
'그러면 $g4['path'] 와 $g4[path]는 정말 똑같은 걸까?' 하는 생각이 들어 테스트를 해봤습니다.
(프로그래밍에서 quotation marks 의 중요성은 다들 아는거니까요 ㅎㅎ)
// 그누보드가 설치되지 않은 곳에 test.php파일을 생성하였습니다.
<?
$g4 = array();
$g4['path'] = 123;
echo $g4[path];
?>
위처럼 기재를 하고 실행을 해보니,
Notice: Use of undefined constant path - assumed 'path' in C:\Server\htdocs\test.php on line 4
123
이라는 문구가 출력되네요. (123은 출력이 되는데 뭔가 에러가 있는데 저게 무슨뜻인가..;;)
그래서 위에 출력된 에러구문으로 여기저기 검색을 해봤더니 대부분의 문서에서 다음과 같은 내용이 있었습니다.
" $a['x'] 와 $a[x] 는 똑같은 것이다. 다만 php 5.3 이상에서는 배열에 대한 규제가 엄격해져서 그런거다... "
(그런데 제 php버젼은 5.2.10 이거든요...)
내가 구문을 잘못짠게 있나? 하고 출력구문을 변수명과 동일하게 테스트를 해보았습니다.
<?
$g4 = array();
$g4['path'] = 123;
echo $g4['path'];
?>
// 에러없이 123만 정상출력
혹시나 하고 변수에 double quotation marks 를 씌워봤습니다.
<?
$g4 = array();
$g4['path'] = 123;
echo "$g4[path]";
?>
// 에러없이 123만 정상출력
(어 이건 뭐지? double quotation marks 를 씌워주면 저게 왜 정상처리가 되는걸까?)
제가 알고 있는 바로는 php도 자바스크립트처럼 dynamic type 이라서 특별히 형에 관한 제약이 없는걸로 압니다.
<?
$x = 123;
echo $x;
?>
이런 경우처럼 말이죠...
--- 정리 ---
1.
$a가 배열로 선언이 되었을때 ( $a = array(); )
$a['x'] 와 $a[x] 는 정말 같은것인가요? 다르다면 어떤점이 다른건가요?
2.
$a['x'] 가 "$a[x]" 랑 같은건가요?
같아진다면 그 이유는 무엇이며, 다르다면 에러가 발생하지 않는 이유는 무엇인가요?
------------
제가 배열에 대해 지식이 많이 부족하여 위의 논리에 대한 부분을 정확히 이해하고 싶습니다.
질문을 상세히 쓰고 싶은 욕심에 불필요한 부분이 너무 많이 들어간게 아닌가 하는 걱정입니다.
긴글 읽어주시느라 고생하신 고수님들께 다시한번 감사의 인사를 올립니다.
아무쪼록 좋은 답변을 기대하며서 이만 글을 마치겟습니다.
php 초보가 그누보드의 원론적인(?) 부분을 공부하다가 배열에 관한 궁금증이 있어서 이렇게 질문을 드립니다.
보통 그누보드를 사용할때 DTD위에
<?
$g4_path="g4";
include_once("g4/common.php");
include_once("$g4[path]/lib/latest.lib.php");
.
.
?>
이런식으로 Heading Code를 작성하게 됩니다.
그런데 $g4_path가 어째서 2줄 뒤에는 $g4[path] 로 변수명이 변하는가에 대한 궁금증이 생겼습니다.
그래서 조금 배운 스크립트언어의 특징을 생각해서 '아 중간에 common.php 에서 어떤 처리가 이루어지겠지' 하고
common.php 를 뜯어본 결과, (필요하신분들을 위해 링크주소에 해당파일주소를 기재했습니다.)
212 : $g4 라는 변수를 배열로 선언하고 ( $g4 = array(); )
217~ 219 : 인젝선방지를 위한 코드를 지나
220 : DTD위에 선언한 $g4_path 를 $g4['path'] 에 담아주고 ( $g4['path'] = $g4_path; )
223 : $g4_path는 해제를 해라 ( unset($g4_path); )
라는 것까지는 이해를 했습니다.
그런데 여기서 $g4['path'] 가 $g4[path] 로 한번 더 변화를 해야 할텐데 이 과정에 대한 특별한 코드가 없길래
'그러면 $g4['path'] 와 $g4[path]는 정말 똑같은 걸까?' 하는 생각이 들어 테스트를 해봤습니다.
(프로그래밍에서 quotation marks 의 중요성은 다들 아는거니까요 ㅎㅎ)
// 그누보드가 설치되지 않은 곳에 test.php파일을 생성하였습니다.
<?
$g4 = array();
$g4['path'] = 123;
echo $g4[path];
?>
위처럼 기재를 하고 실행을 해보니,
Notice: Use of undefined constant path - assumed 'path' in C:\Server\htdocs\test.php on line 4
123
이라는 문구가 출력되네요. (123은 출력이 되는데 뭔가 에러가 있는데 저게 무슨뜻인가..;;)
그래서 위에 출력된 에러구문으로 여기저기 검색을 해봤더니 대부분의 문서에서 다음과 같은 내용이 있었습니다.
" $a['x'] 와 $a[x] 는 똑같은 것이다. 다만 php 5.3 이상에서는 배열에 대한 규제가 엄격해져서 그런거다... "
(그런데 제 php버젼은 5.2.10 이거든요...)
내가 구문을 잘못짠게 있나? 하고 출력구문을 변수명과 동일하게 테스트를 해보았습니다.
<?
$g4 = array();
$g4['path'] = 123;
echo $g4['path'];
?>
// 에러없이 123만 정상출력
혹시나 하고 변수에 double quotation marks 를 씌워봤습니다.
<?
$g4 = array();
$g4['path'] = 123;
echo "$g4[path]";
?>
// 에러없이 123만 정상출력
(어 이건 뭐지? double quotation marks 를 씌워주면 저게 왜 정상처리가 되는걸까?)
제가 알고 있는 바로는 php도 자바스크립트처럼 dynamic type 이라서 특별히 형에 관한 제약이 없는걸로 압니다.
<?
$x = 123;
echo $x;
?>
이런 경우처럼 말이죠...
--- 정리 ---
1.
$a가 배열로 선언이 되었을때 ( $a = array(); )
$a['x'] 와 $a[x] 는 정말 같은것인가요? 다르다면 어떤점이 다른건가요?
2.
$a['x'] 가 "$a[x]" 랑 같은건가요?
같아진다면 그 이유는 무엇이며, 다르다면 에러가 발생하지 않는 이유는 무엇인가요?
------------
제가 배열에 대해 지식이 많이 부족하여 위의 논리에 대한 부분을 정확히 이해하고 싶습니다.
질문을 상세히 쓰고 싶은 욕심에 불필요한 부분이 너무 많이 들어간게 아닌가 하는 걱정입니다.
긴글 읽어주시느라 고생하신 고수님들께 다시한번 감사의 인사를 올립니다.
아무쪼록 좋은 답변을 기대하며서 이만 글을 마치겟습니다.
댓글 전체
변수 중에 상수라는 것이 있습니다(constant)
define('x' ,"asdfg"); 이렇게 선언 합니다
echo x; --> asdfg 출력
Use of undefined constant path <---이게 바로 상수로 설정되지않은 상수변수 path를 사용했다는 말입니다
이 경고문구는 서버 설정에 따라 나올 수도 나오지 않을 수도 있습니다
$a['x'] 와 $a[x] 에서 따옴표 없는 x는 상수 인지 변수첨자 인지 판단을 해야 하기 때문에
상수로 선언된 x가 있는지 먼저 찾아보고 없으면 변수첨자로 취급하게 됩니다
따라서 $a['x'] 라고 사용하는 것이 $a[x] 로 사용 하는 것보다 좋은 방법이라고 합니다
위의 경우에 x->asdfg로 선언 했기 때문에 $a[x] = $a['asdfg'] 가 됩니다
따라서 $a['x'] 와 $a[x] 는 다르게 됩니다
상수 선언한 것이 없으면 같게 됩니다(서버 설정에 따라 경고문이 나오거나)
"$a[x]" <--- 이때는 x를 상수인지 찾아보지않고 바로 변수의 첨자로 취급한다는 것을 추측할 수 있겠죠?
"$a['x']" <-- 이렇게 하면 에러가 나올 것입니다
복잡하게 생각할 것 없이
항상 $g4['path'] 이렇게 사용하는 것이 정석이다
출력시에는 echo $g4['path']; 이렇게 하면 된다
다른 문자와 결합헤서 사용시
$tmp= $g4['path'].'/bbs/board.php'; 또는 $tmp="$g4[path]/bbs/board.php";
출력시
echo $g4['path'].'/data/file';또는 echo "$g4[path]/data/file";
define('x' ,"asdfg"); 이렇게 선언 합니다
echo x; --> asdfg 출력
Use of undefined constant path <---이게 바로 상수로 설정되지않은 상수변수 path를 사용했다는 말입니다
이 경고문구는 서버 설정에 따라 나올 수도 나오지 않을 수도 있습니다
$a['x'] 와 $a[x] 에서 따옴표 없는 x는 상수 인지 변수첨자 인지 판단을 해야 하기 때문에
상수로 선언된 x가 있는지 먼저 찾아보고 없으면 변수첨자로 취급하게 됩니다
따라서 $a['x'] 라고 사용하는 것이 $a[x] 로 사용 하는 것보다 좋은 방법이라고 합니다
위의 경우에 x->asdfg로 선언 했기 때문에 $a[x] = $a['asdfg'] 가 됩니다
따라서 $a['x'] 와 $a[x] 는 다르게 됩니다
상수 선언한 것이 없으면 같게 됩니다(서버 설정에 따라 경고문이 나오거나)
"$a[x]" <--- 이때는 x를 상수인지 찾아보지않고 바로 변수의 첨자로 취급한다는 것을 추측할 수 있겠죠?
"$a['x']" <-- 이렇게 하면 에러가 나올 것입니다
복잡하게 생각할 것 없이
항상 $g4['path'] 이렇게 사용하는 것이 정석이다
출력시에는 echo $g4['path']; 이렇게 하면 된다
다른 문자와 결합헤서 사용시
$tmp= $g4['path'].'/bbs/board.php'; 또는 $tmp="$g4[path]/bbs/board.php";
출력시
echo $g4['path'].'/data/file';또는 echo "$g4[path]/data/file";
일림 표시가 있어서 와보니 2013년도 답변을 1년이나 지나서 이제야 확인했다는 것처럼 채택을 했군요
답변 채택은 하나 않으나 저에겐 상관 없는 일이지만 저렇게 긴 내용을 타이핑만 하려해도 시간이 제법 걸렸을 터인데
고맙다는 말은 고사하고 알겠다든지 그래도 모르겠다든지 가타부타 언급한마디 없이 1년이나 지나서 채택 던져놓고
가는 것이 영 매너가 아니네요
앞으로 한월님 질문에는 답변 달지않도록 노력하겠습니다
답변 채택은 하나 않으나 저에겐 상관 없는 일이지만 저렇게 긴 내용을 타이핑만 하려해도 시간이 제법 걸렸을 터인데
고맙다는 말은 고사하고 알겠다든지 그래도 모르겠다든지 가타부타 언급한마디 없이 1년이나 지나서 채택 던져놓고
가는 것이 영 매너가 아니네요
앞으로 한월님 질문에는 답변 달지않도록 노력하겠습니다
균이님께 죄송하다는 사과의 말씀을 드립니다.
네이버 지식in에서 답변활동만 하다보니, 이쪽에서는 감사인사를 꼭 해야 한다는 부분을 간과한듯 싶네요...
지식in에서 다른분이 궁금해하시던 질문을 보고 우연히 저도 해당 내용이 궁금하여 그대로 옮겨온 질문이다보니,
저도 미처 답변에 대해 신경을 쓰지 못한점 양해부탁드립니다.
앞으로는 균이님이 해주신 답변에는 꼬박꼬박 감사인사 남기도록 하겠습니다.
고수분께 실례를 범한점 넓은 아량으로 이해해주시기 바랍니다.
네이버 지식in에서 답변활동만 하다보니, 이쪽에서는 감사인사를 꼭 해야 한다는 부분을 간과한듯 싶네요...
지식in에서 다른분이 궁금해하시던 질문을 보고 우연히 저도 해당 내용이 궁금하여 그대로 옮겨온 질문이다보니,
저도 미처 답변에 대해 신경을 쓰지 못한점 양해부탁드립니다.
앞으로는 균이님이 해주신 답변에는 꼬박꼬박 감사인사 남기도록 하겠습니다.
고수분께 실례를 범한점 넓은 아량으로 이해해주시기 바랍니다.