문자열 (Strings)

문자열은 두 개의 delimiters를 사용해 나타낸다.

문자열을 큰 따옴표(")로 둘러 싸게 되며, 특수 문자들은 다음과 같이 표시하여 포함시킨다. C나 Perl에서처럼 백슬래시(\)를 사용하여 특수 기호를 표시하게 된다.

표 7-1. Escaped characters

sequencemeaning
\n linefeed (LF or 0x0A in ASCII)
\r carriage return (CR or 0x0D in ASCII)
\t horizontal tab (HT or 0x09 in ASCII)
\\ backslash
\$ dollar sign
\" double-quote
\[0-7]{1,3} the sequence of characters matching the regular expression is a character in octal notation
\x[0-9A-Fa-f]{1,2} the sequence of characters matching the regular expression is a character in hexadecimal notation

위에 나온 것 외의 다른 문자도 escape를 할 수 있지만, warning이 발생하게 된다.

문자열을 표현하는 또 다른 방법은 큰 따옴표(") 대신 작은 따옴표(')를 사용하는 것이다. 이것은 \\과 \'의 두 개만을 백슬래시 처리하고 나머지는 그냥 둔다. 작은 따옴표를 사용하는 경우에는 변수를 문자열 안에 두어 그 변수의 내용을 문자열에 삽입하는 기능을 사용할 수 없다.

문자열을 선언하는 다른 방법은 here doc 구문("<<<")을 사용하는 것이다. <<< 뒤에 적당한 identifier를 적어주고, 원하는 문자열의 내용을 적은 후에, 앞에 적은 identifier로 문자열을 끝맷으면 된다. 끝맷는 identifier는 반드시 해당 라인의 첫번째 칸에서 시작해야 한다. 해당 레이블의 이름은 PHP의 다른 레이블과 동일한 방식으로 지으면 된다. 영문자와 숫자, 밑줄(_)만을 사용하여야 하고, 첫글자로 숫자는 안된다.

Here doc 문자열은 닫는 큰따옴표를 사용하지 않고 여는 큰따옴표로만 묶인 문자열과 동일하게 취급된다. 이것은 Here doc 문자열내에서는 큰따옴표를 escape 할 필요가 없고, 위에 적힌 다른 escape 코드는 사용할 수 있다는 것을 의미한다. 문자열내에 변수를 사용하여 그 변수의 내용을 문자열에 삽입하는 기능을 사용할 수 있지만, 변수가 들어가는 식이 복잡할 경우 주의해서 사용하자.

예 7-1. doc string 예제

<?php
$str = <<<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 <<<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;
?>

참고: Here doc은 PHP 4에서부터 지원된다

문자열은 '.' (점) 연산자로 연결할 수 있다. '+' (더하기) 연산자는 사용할 수 없다. 자세한 정보는 문자열 연산자(String operators) 부분을 참조하기 바란다.

문자열내의 개개의 문자는, C 언어에서의 문자의 배열로된 문자열처럼 배열에 숫자 인덱스를 통해 접근이 가능하다. 아래 그 예가 있다.

예 7-2. 문자열 예제

<?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 '<p>Number: 9</p>' */
$num = 9;
$str = "<p>Number: $num</p>";

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

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

/* 문자열의 마지막 문자 얻기. */
$str = 'This is still a test.';
$last = $str[strlen($str)-1];
?>

문자열 변환 (String conversion)

문자열이 숫자값로 다루어질 때, 결과 값과 type은 다음과 같이 결정된다.

만약 문자열 안에 '.' 이나 'e', 'E'의 문자가 있을 경우 그 type은 double이 된다. 그렇지 않다면 정수 값이다

해당하는 값은 문자열의 처음에서 시작해서 가능한 부분까지만 사용된다. 문자열이 올바른 숫자 데이터로 시작하지 않으면 그 값은 0이다. 올바른 숫자 데이터는 '+'/'-', '0'-'9','.'과 숫자 뒤의 'e'나 'E' 표시이다

첫 번째 표현식이 string인 경우, 변수의 type은 첫 번째가 아닌 두 번째 표현식에 의해 결정된다.

$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)

이 변환에 대한 자세한 설명은Unix manual page의 strtod(3)을 보아라.

만약 여러분이 위의 예제를 실제 실험하고자 한다면, 위의 예제를 잘라 붙인 후에, 어떤 일이 일어났는 가를 알기 위해 아래의 줄을 삽입한다.

echo "\$foo==$foo; type is " . gettype ($foo) . "<br>\n";