File: types.xml

package info (click to toggle)
phpdoc 20020310-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 35,272 kB
  • ctags: 354
  • sloc: xml: 799,767; php: 1,395; cpp: 500; makefile: 200; sh: 140; awk: 51
file content (649 lines) | stat: -rw-r--r-- 24,204 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
<?xml version="1.0" encoding="utf-8"?>
<chapter id="language.types">
	<title>변수 형태 (Types)</title>
	<para>
	PHP는 다음과 같은 변수형을 지원한다. : 
   <itemizedlist>
			<listitem>
				<simpara>
					<link linkend="language.types.array">배열(array)</link>
				</simpara>
			</listitem>
			<listitem>
				<simpara>
					<link linkend="language.types.float">실수형(floating-point numbers)</link>
				</simpara>
			</listitem>
			<listitem>
				<simpara>
					<link linkend="language.types.integer">정수형(integer)</link>
				</simpara>
			</listitem>
			<listitem>
				<simpara>
					<link linkend="language.types.object">객체(object)</link>
				</simpara>
			</listitem>
			<listitem>
				<simpara>
					<link linkend="language.types.string">문자열(string)</link>
				</simpara>
			</listitem>
		</itemizedlist>
	</para>
	<simpara>
	변수타입은 보통 프로그래머가 설정해 줄 필요가 없다. 
	대신 PHP가 실행중에 변수 값의 내용에 따라 자동으로 바꿔가며 설정한다.
  </simpara>
	<simpara>
	만약 여러분이 어떤 변수를 특정한 변수 타입으로 지정하고 싶다면
	해당 변수를 <link linkend="language.types.typecasting">cast</link> 하거나, 
	<function>settype</function> 함수를 사용한다.
  </simpara>
	<simpara>
	종종 변수들은 실행시 어떤 타입으로 되어 있느냐에 따라 특정한 상황에서 원하는 대로 동작하지 않을 때가 있다. 
	<link linkend="language.types.type-juggling">Type Juggling</link> 편을 보면 자세히 알 수 있다.
  </simpara>
	<sect1 id="language.types.integer">
		<title>정수형 (Integers)</title>
		<para>
    정수형은 다음과 같은 형태의 명령으로 지정할 수 있다.
    <informalexample>
				<programlisting role="php">
$a = 1234; # 십진수
$a = -123; # 음수
$a = 0123; # 8진수 (십진수 83과 같음)
$a = 0x12; # 16진수 (십진수 18과 같음)
     </programlisting>
			</informalexample>
	정수의 크기는 실행환경에 따라 다르다(platform-dependent).
	보통 최대값이 약 20억(32 bits signed)인 경우가 많다.
   </para>
	</sect1>
	<sect1 id="language.types.float">
		<title>실수형 (Floating point numbers)</title>
		<para>
	실수형("doubles")은 다음과 같은 형태의 문장으로 지정할 수 있다.
    <informalexample>
				<programlisting role="php"> 
$a = 1.234; $a = 1.2e3;
     </programlisting>
			</informalexample>
	정수의 크기는 실행환경에따라 다르다.(platform-dependent) 
	보통 최대값이 약 ~1.8e308에 14자리의 정밀도(64 bit IEEE format)인 경우가 많다.
   </para>
		<warning id="warn.float-precision">
			<para>
     여기서 <literal>0.1</literal> 이나 <literal>0.7</literal>같은 단순한 소수값이 
     PHP 내부에 저장될 때 아주 약간의 그 값에 오차가 생길 수 있다는 것을 알아야 한다.
     문제는 그 작은 오차로 인해 다음의 예와 같은 명백히 잘못된 결과가 나올 수도 있다는 점이다. :
     <literal>floor((0.1+0.7)*10)</literal>의 식은 일반적인 실행 환경에서는 <literal>8</literal>이 아닌 
     <literal>7</literal>을 반환한다. 함수의 괄호안에 있는 값이 <literal>7.9999999999...</literal>가 되기 때문이다.
    </para>
			<para>
     이는 유한한 십진수로 분수를 정확하게 표현하기 불가는 하다는 것과 일맥상통한다.
     예를 들자면 분수 <literal>1/3</literal> 을 십진수로 표현하자면 <literal>0.3333333. . .</literal>이 된다.
    </para>
			<para>     
     따라서 실수 결과값에 대해서는 마지막 자리의 값을 믿지 말도록 하고, 
     실수끼리는 = 등의 '같다' 비교를 하지 않도록 하자. 
     만약 여러분이 좀더 높은 정밀도를 필요로 한다면 
     <link linkend="ref.bc">arbitrary precision math functions</link> 이나 
     <link linkend="ref.gmp">gmp</link>에 있는 함수들을 사용하기 바란다.
    </para>
		</warning>
	</sect1>
	<sect1 id="language.types.string">
		<title>문자열 (Strings)</title>
		<para>
    문자열은 두 개의 delimiters를 사용해 나타낸다.
   </para>
		<para>
	문자열을 큰 따옴표(")로 둘러 싸게 되며, 특수 문자들은 다음과 같이 표시하여 포함시킨다.
	C나 Perl에서처럼 백슬래시(\)를 사용하여 특수 기호를 표시하게 된다.
    <table>
				<title>Escaped characters</title>
				<tgroup cols="2">
					<thead>
						<row>
							<entry>sequence</entry>
							<entry>meaning</entry>
						</row>
					</thead>
					<tbody>
						<row>
							<entry>
								<literal>\n</literal>
							</entry>
							<entry>linefeed (LF or 0x0A in ASCII)</entry>
						</row>
						<row>
							<entry>
								<literal>\r</literal>
							</entry>
							<entry>carriage return (CR or 0x0D in ASCII)</entry>
						</row>
						<row>
							<entry>
								<literal>\t</literal>
							</entry>
							<entry>horizontal tab (HT or 0x09 in ASCII)</entry>
						</row>
						<row>
							<entry>
								<literal>\\</literal>
							</entry>
							<entry>backslash</entry>
						</row>
						<row>
							<entry>
								<literal>\$</literal>
							</entry>
							<entry>dollar sign</entry>
						</row>
						<row>
							<entry>
								<literal>\"</literal>
							</entry>
							<entry>double-quote</entry>
						</row>
						<row>
							<entry>
								<literal>\[0-7]{1,3}</literal>
							</entry>
							<entry>
         the sequence of characters matching the regular
         expression is a character in octal notation
        </entry>
						</row>
						<row>
							<entry>
								<literal>\x[0-9A-Fa-f]{1,2}</literal>
							</entry>
							<entry>
         the sequence of characters matching the regular
         expression is a character in hexadecimal notation
        </entry>
						</row>
					</tbody>
				</tgroup>
			</table>
		</para>
		<para>
	위에 나온 것 외의 다른 문자도 escape를 할 수 있지만, warning이 발생하게 된다.
   </para>
		<para>
	문자열을 표현하는 또 다른 방법은 큰 따옴표(") 대신 작은 따옴표(')를 사용하는 것이다. 
	이것은 \\과 \'의 두 개만을 백슬래시 처리하고 나머지는 그냥 둔다. 
	작은 따옴표를 사용하는 경우에는 변수를 문자열 안에 두어 
	그 변수의 내용을 문자열에 삽입하는 기능을 사용할 수 <emphasis>없다</emphasis>.
   </para>
		<simpara>
	문자열을 선언하는 다른 방법은  here doc 구문("&lt;&lt;&lt;")을 사용하는 것이다. 
	<literal>&lt;&lt;&lt;</literal> 뒤에 적당한 identifier를 적어주고, 원하는 문자열의 내용을 적은 후에, 
	앞에 적은 identifier로 문자열을 끝맷으면 된다. 
	끝맷는 identifier는 <emphasis>반드시</emphasis> 해당 라인의 첫번째 칸에서 시작해야 한다.
	해당 레이블의 이름은 PHP의 다른 레이블과 동일한 방식으로 지으면 된다. 
	영문자와 숫자, 밑줄(_)만을 사용하여야 하고, 첫글자로 숫자는 안된다.
   </simpara>
		<para>
	Here doc 문자열은 닫는 큰따옴표를 사용하지 않고 여는 큰따옴표로만 묶인 문자열과 동일하게 취급된다.
	이것은 Here doc 문자열내에서는 큰따옴표를 escape 할 필요가 없고,
	위에 적힌 다른 escape 코드는 사용할 수 있다는 것을 의미한다.
	문자열내에 변수를 사용하여 그 변수의 내용을 문자열에 삽입하는 기능을 사용할 수 있지만,
	변수가 들어가는 식이 복잡할 경우 주의해서 사용하자.
    <example>
				<title>doc string 예제</title>
				<programlisting>
&lt;?php
$str = &lt;&lt;&lt;EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;

/* 변수도 사용된 좀더 복잡한 예제. */
class foo {
    var $foo;
    var $bar;

    function foo() {
        $this->foo = 'Foo';
        $this->bar = array('Bar1', 'Bar2', 'Bar3');
    }
}

$foo = new foo();
$name = 'MyName';

echo &lt;&lt;&lt;EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>
     </programlisting>
			</example>
		</para>
		<note>
			<para>
     Here doc은 PHP 4에서부터 지원된다
    </para>
		</note>
		<para>
	문자열은 '.' (점) 연산자로 연결할 수 있다. 
	'+' (더하기) 연산자는 사용할 수 없다. 
	자세한 정보는 <link linkend="language.operators.string">문자열 연산자(String operators)</link> 부분을 참조하기 바란다.
   </para>
		<para>
	문자열내의 개개의 문자는, C 언어에서의 문자의 배열로된 문자열처럼 
	배열에 숫자 인덱스를 통해 접근이 가능하다. 아래 그 예가 있다.
   </para>
		<para>
			<example>
				<title>문자열 예제</title>
				<programlisting role="php">
&lt;?php
/* 문자열을 대입한다. */
$str = "This is a string";

/* 문자열 추가. */
$str = $str . " with some more text";

/* newline까지 포함해서 문자열 추가하는 다른방법. */
$str .= " and a newline at the end.\n";

/* This string will end up being '&lt;p&gt;Number: 9&lt;/p&gt;' */
$num = 9;
$str = "&lt;p&gt;Number: $num&lt;/p&gt;";

/* '&lt;p&gt;Number: $num&lt;/p&gt;' 자체가 문자열이 된다 */
$num = 9;
$str = '&lt;p&gt;Number: $num&lt;/p&gt;';

/* 문자열의 첫번째 문자 얻기  */
$str = 'This is a test.';
$first = $str[0];

/* 문자열의 마지막 문자 얻기. */
$str = 'This is still a test.';
$last = $str[strlen($str)-1];
?&gt;	  
     </programlisting>
			</example>
		</para>
		<sect2 id="language.types.string.conversion">
			<title>문자열 변환 (String conversion)</title>
			<simpara>
	문자열이 숫자값로 다루어질 때, 결과 값과 type은 다음과 같이 결정된다.
    </simpara>
			<simpara>
	만약 문자열 안에 '.' 이나 'e', 'E'의 문자가 있을 경우 
	그 type은 double이 된다. 그렇지 않다면 정수 값이다 
    </simpara>
			<para>
	해당하는 값은 문자열의 처음에서 시작해서 가능한 부분까지만 사용된다. 
	문자열이 올바른 숫자 데이터로 시작하지 않으면 그 값은 0이다. 
	올바른 숫자 데이터는 '+'/'-', '0'-'9','.'과 숫자 뒤의 'e'나 'E' 표시이다
    </para>
			<simpara>
	첫 번째 표현식이 string인 경우, 변수의 type은 첫 번째가 아닌 두 번째 표현식에 의해 결정된다.
    </simpara>
			<informalexample>
				<programlisting role="php">
$foo = 1 + "10.5";              // $foo 는 double형 (11.5)
$foo = 1 + "-1.3e3";            // $foo 는 double형 (-1299)
$foo = 1 + "bob-1.3e3";         // $foo 는 정수형 (1)
$foo = 1 + "bob3";              // $foo 는 정수형 (1)
$foo = 1 + "10 Small Pigs";     // $foo 는 정수형 (11)
$foo = 1 + "10 Little Piggies"; // $foo 는 정수형 (11)
$foo = "10.0 pigs " + 1;        // $foo 는 정수형 (11)
$foo = "10.0 pigs " + 1.0;      // $foo 는 double형 (11)     
     </programlisting>
			</informalexample>
			<simpara>
	이 변환에 대한 자세한 설명은Unix manual page의 strtod(3)을 보아라. 
    </simpara>
			<para>
	만약 여러분이 위의 예제를 실제 실험하고자 한다면, 위의 예제를 잘라 붙인 후에, 
	어떤 일이 일어났는 가를 알기 위해 아래의 줄을 삽입한다.
     <informalexample>
					<programlisting role="php">
echo "\$foo==$foo; type is " . gettype ($foo) . "&lt;br&gt;\n";
      </programlisting>
				</informalexample>
			</para>
		</sect2>
	</sect1>
	<sect1 id="language.types.array">
		<title>배열(Arrays)</title>
		<para>
	배열을 실제로 hash tables (associative arrays) 과 indexed arrays (vectors)의 두가지로 동시에 사용된다.
   </para>
		<sect2 id="language.types.array.single-dim">
			<title>일차원 배열 (Single Dimension Arrays)</title>
			<para>
	PHP는 scalar 배열과 associative 배열의 두 가지를 지원한다. 
	사실 두 가지의 차이는 없다. 여러분은 <function>list</function> 나<function>array</function>
	함수를 사용하여 배열을 만들거나, 각 원소의 값을 정해 주어 배열을 만들 수 있다. 
     <informalexample>
					<programlisting role="php"> 
$a[0] = "abc"; 
$a[1] = "def"; 
$b["foo"] = 13;
      </programlisting>
				</informalexample>
			</para>
			<para>
	또한 다음과 같이 변수에 값을 더해주는 것만으로 배열을 만들 수도 있다.
	배열 변수에 빈 대괄호([])를 붙이고 값을 지정하면,
	해당 배열의 맨뒤에 한 원소가 추가되고 그 값이 이 추가된 원소에 저장된다.
     <informalexample>
					<programlisting role="php"> 
$a[] = "hello"; // $a[2] == "hello"
$a[] = "world"; // $a[3] == "world" 
      </programlisting>
				</informalexample>
			</para>
			<para>
	배열은 정렬을 원하는 형식에 따라 <function>asort</function>,
     <function>arsort</function>, <function>ksort</function>,
     <function>rsort</function>, <function>sort</function>,
     <function>uasort</function>, <function>usort</function>, 
     <function>uksort</function> 함수들을 이용해 순서대로 정렬할 수 있다. 
    </para>
			<para>
				<function>count</function> 함수를 사용하면 배열의 원소 개수를 셀 수 있다. 
    </para>
			<para>
				<function>next</function>와 <function>prev</function>함수를 이용하여 배열의 내용을 탐색할 수 있다. 
	배열의 내용을 탐색하는 방법으로 <function>each</function>함수를 사용할 수도 있다.
    </para>
		</sect2>
		<sect2 id="language.types.array.multi-dim">
			<title>다차원 배열 (Multi-Dimensional Arrays)</title>
			<para>
	다차원 배열도 실제로 매우 간단한다. 배열의 각 차원에 대하여 단지 [key]값을 뒤에 붙여주면 된다.:
     <informalexample>
					<programlisting role="php"> 
$a[1]      = $f;               # 일차원 배열의 예제
$a["foo"]  = $f;   

$a[1][0]     = $f;             # 이차원 배열의 예제
$a["foo"][2] = $f;             # (배열 지시자를 숫자와 문자로 혼합할수 있다)
$a[3]["bar"] = $f;             # (배열 지시자를 숫자와 문자로 혼합할수 있다)

$a["foo"][4]["bar"][0] = $f;   # 4차원배열!
      </programlisting>
				</informalexample>
			</para>
			<para>
	PHP3에서, 문자열 내에서 다차원 배열의 값을 직접 접근하는 것은 불가능하다. 
	예를들어 다음과 같은 문장은 원하는 결과를 얻지 못할 것이다.:
     <informalexample>
					<programlisting role="php"> 
$a[3]['bar'] = 'Bob';
echo "This won't work: $a[3][bar]";
      </programlisting>
				</informalexample>
	PHP3에서 위의 출력은 <computeroutput>This won't work: Array[bar]</computeroutput> 일 것이다. 
	원하는 결과를 얻으려면 문자열 연결 연산자(.)를 사용하여야 할 것이다. :
     <informalexample>
					<programlisting role="php">
$a[3]['bar'] = 'Bob';
echo "This will work: " . $a[3][bar];
      </programlisting>
				</informalexample>
			</para>
			<para>
	PHP4에서는 접근하려는 배열식을 중괄호({})로 둘러쌈으로써 이것이 가능하다.:
     <informalexample>
					<programlisting role="php">
$a[3]['bar'] = 'Bob';
echo "This will work: {$a[3][bar]}";
      </programlisting>
				</informalexample>
			</para>
			<para>
	여러 가지 방법으로 이 다차원 배열에 값을 넣을 수 있으나, 
	associative 배열에 값을 저장하는 간단한 방법으로 <function>array</function> 명령을 사용하는 방법이 있다. 
	우선 다음의 두가지 코드는 일차원 배열에 값을 저장하는 방법으로 결과는 동일하다.:
     <informalexample>
					<programlisting role="php"> 
# Example 1:

$a["color"]	= "red";
$a["taste"]	= "sweet";
$a["shape"]	= "round";
$a["name"]	= "apple";
$a[3]		= 4;

# Example 2:
$a = array(
     "color" => "red",
     "taste" => "sweet",
     "shape" => "round",
     "name"  => "apple",
     3       => 4
);
      </programlisting>
				</informalexample>
			</para>
			<para>
				<function>array</function> 함수는 다차원 배열에 대해서도 다음과 같이 사용할 수 있다. :
     <informalexample>
					<programlisting role="php"> 
&lt;?php
$a = array(
     "apple"  => array(
          "color"  => "red",
          "taste"  => "sweet",
          "shape"  => "round"
     ),
     "orange"  => array(
          "color"  => "orange",
          "taste"  => "tart",
          "shape"  => "round"
     ),
     "banana"  => array(
          "color"  => "yellow",
          "taste"  => "paste-y",
          "shape"  => "banana-shaped"
     )
);

echo $a["apple"]["taste"];    # will output "sweet"
?>
      </programlisting>
				</informalexample>
			</para>
		</sect2>
	</sect1>
	<sect1 id="language.types.object">
		<title>객체 (Objects)</title>
		<sect2 id="language.types.object.init">
			<title>객체 초기화 (Object Initialization)</title>
			<para>
	객체(Object)를 초기화하는 방법은 <literal>new</literal> 명령을 사용하여 object를 변수에 인스턴스 시키는 것이다. 
     <informalexample>
					<programlisting role="php">
&lt;?php
class foo {
    function do_foo() { 
        echo "Doing foo."; 
    }
}

$bar = new foo;
$bar->do_foo();
?>
      </programlisting>
				</informalexample>
			</para>
			<simpara>
	자세한 논의는 <link linkend="language.oop">클래스와 객체(Classes and Objects)</link> 절을 읽어보기 바란다.
    </simpara>
		</sect2>
	</sect1>
	<sect1 id="language.types.type-juggling">
		<title>뱐수형 다루기 (Type juggling)</title>
		<simpara>
    PHP에서는 변수형을 명확하게 선언할 필요도 없고, 변수형 선언이
    제공되지도 않는다. 변수의 type은 구문내에서 사용되어질때 결정된다.
    다시말해 변수<parameter>var</parameter>에 문자열을 대입하면, 변수
    <parameter>var</parameter> 의 형은 문자열이 되고, 변수
    <parameter>var</parameter>에 정수값을 대입하면 정수형 변수가 된다
</simpara>
		<para>   PHP의 자동형변환에 대한 예는 '+'연산자에 대한 역활을 보면 알수 있다.
   '+'연산자가 사용된 연산 중에 하나의 피연산자가 double형이라면 다른 피연산자들도
   double형으로 계산되어 결과는 double형이 된다. 마찬가지로 하나의 피연산자가 
   정수형이라면 그 결과도 정수형이 된다. 여기서 주의해야 할 것은 어떤 피연자에 의해
   다른 피연산자의 형이 바뀌는 것이 아니라, 단지 그 결과값의 형을 결정하는 데에만 영향을 미친다는 것이다.
    <informalexample>
				<programlisting role="php">
$foo = "0";  // $foo 는 문자열 변수 (ASCII 48)
$foo++;      // $foo 는 문자열 변수 "1" (ASCII 49)
$foo += 1;   // $foo 는 정수형 변수로 변환되었다. (2)
$foo = $foo + 1.3;  // $foo 는 double형 변수로 변환되었다. (3.3)
$foo = 5 + "10 Little Piggies"; // $foo 는 정수형 변수 (15)
$foo = 5 + "10 Small Pigs";     // $foo 는 정수형 변수 (15)
     </programlisting>
			</informalexample>
		</para>
		<simpara>    위의 예들 중 마지막 두 예가 이해가 되지 않는다면 
<link linkend="language.types.string.conversion">문자열 변환(String
    conversion)</link>을 참조하기 바란다.
   </simpara>
		<simpara>    변수를 특정한 형(type)으로 취급되도록 하고자 할 경우
<link linkend="language.types.typecasting">Type
    casting</link>을 참조하고, 변수의 형을 변환시키려고 한다면
    <function>settype</function>을 참조하기 바란다.
   </simpara>
		<para>
    만약 위의 예제를 실제 실험하고자 한다면, 
    위의 예제를 잘라 붙인 후에, 어떤 일이 일어났는 가를 알기 위해 
    아래의 문장을 삽입하여 살펴볼 수 있다.
    <informalexample>
				<programlisting role="php">
echo "\$foo==$foo; type is " . gettype ($foo) . "&lt;br&gt;\n";
     </programlisting>
			</informalexample>
		</para>
		<note>
			<para>
     배열로의 자동 형변환은 일반적으로 정의되어 있지 않다.
     <informalexample>
					<programlisting role="php">
$a = 1;       // $a 는 정수형이다
$a[0] = "f";  // $a 는 $a[0]가 "f"의 값을 가진 배열이다.      </programlisting>
				</informalexample>
			</para>
			<para>
     위의 예는 $a가 첫번째 요소로 'f'를 가지는 배열로 형변환 되는게 명확하게 보이지만,
     아래의 경우를 생각해 보자
     <informalexample>
					<programlisting role="php">
$a = "1";     // $a는 문자열이다
$a[0] = "f";  // 첨자 0이 문자열에 대한 오프셋(offset)인가? 여기서는 어떤일이 일어날 것인가?
      </programlisting>
				</informalexample>
			</para>
			<para>
     PHP에서는 배열의 인덱스(index)와 동일한 형태를 사용하여, 
     문자열 변수에 오프셋(offset)을 이용한 인덱스(index)를 사용할 수 있다. 
     따라서 위의 예는 다음과 같은 문제를 안고 있다.:
     $a가 첫번째 요소가 "f"인 배열인가?
     "f"가 문자열 변수 $a의 첫번째 문자가 되어야 하는가?
    </para>
			<para>
     이러한 이유로, PHP 3.0.12 와 PHP 4.0b3-RC4에서 위와 같은 경우의 
     자동 형 변환은 정의되어 있지 않다고 한다. 이에 대한 정확한 정의는 논의 되어 질것이다.
    </para>
		</note>
		<sect2 id="language.types.typecasting">
			<title>변수형 적용(Type Casting)</title>
			<para>
     PHP에서 변수형 적용(type casting)은 C language에서와 매우 유사하다.
     원하는 타입을 적용(casting)되어지는 변수앞에 괄호로 묶어서 써 주기만 하면 된다.
     <informalexample>
					<programlisting role="php">
$foo = 10;   // $foo는 정수형이다.
$bar = (double) $foo;   // $bar는 type casting으로 double형이다
      </programlisting>
				</informalexample>
			</para>
			<para>
     아래와 같은 경우를 적용할 수 있다:
     <itemizedlist>
					<listitem>
						<simpara>(int), (integer) - 정수로 cast</simpara>
					</listitem>
					<listitem>
						<simpara>(real), (double), (float) - double형으로 cast</simpara>
					</listitem>
					<listitem>
						<simpara>(string) - 문자열로 cast</simpara>
					</listitem>
					<listitem>
						<simpara>(array) - 배열로 cast</simpara>
					</listitem>
					<listitem>
						<simpara>(object) - 객체(object)로 cast</simpara>
					</listitem>
				</itemizedlist>
			</para>
			<para>
     괄호안에 tab이나 공백문자는 허용되므로 아래의 두 문장은 같이 취급된다.
     <informalexample>
					<programlisting role="php">
$foo = (int) $bar;
$foo = ( int ) $bar;
      </programlisting>
				</informalexample>
			</para>
			<para>
     특정한 타입으로 casting될때의 결과는 명확하지 않다.
     예를 들어 다음과 같은 경우 주의를 요한다.
    </para>
			<para>
     스칼라(scalar)변수나 문자열 변수가 배열로 casting될때 그 변수는
     배열의 첫번째 요소가 된다.
     <informalexample>
					<programlisting role="php">
$var = 'ciao';
$arr = (array) $var;
echo $arr[0];  // 결과값은 'ciao'  이 된다
      </programlisting>
				</informalexample>
			</para>
			<para>
     스칼라(scalar)변수나 문자열 변수가 객체로 casting될때 그 변수는
     'scalar'라는 객체의 속성값이 된다.     
     <informalexample>
					<programlisting role="php">
$var = 'ciao';
$obj = (object) $var;
echo $obj-&gt;scalar;  // 결과값은 'ciao' 이 된다
      </programlisting>
				</informalexample>
			</para>
		</sect2>
	</sect1>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1 
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->