A
string is series of characters. In PHP, a character
is the same as a byte, that is, there are exactly 256
different characters possible. This also implies that PHP has
no native support of Unicode. See
utf8_encode() and
utf8_decode() for some Unicode support.
注: It is no problem for a string to become very large. There is no practical bound to the size of strings imposed by PHP, so there is no reason at all to worry about long strings.
A string literal can be specified in three different
ways.
The easiest way to specify a simple string is to
enclose it in single quotes (the character ').
To specify a literal single quote, you will need to
escape it with a backslash (\),
like in many other languages. If a backslash needs to
occur before a single quote or at the end of the string,
you need to double it. Note that if you try to escape any
other character, the backslash will also be printed! So
usually there is no need to escape the backslash
itself.
注: In PHP 3, a warning will be issued at the E_NOTICE level when this happens.
注: Unlike the two other syntaxes, variables will not be expanded when they occur in single quoted strings.
?php echo 'this is a simple string'; echo 'You can also have embedded newlines in strings this way as it is okay to do'; // Outputs: "I'll be back" echo 'Arnold once said: "I\'ll be back"'; // Outputs: You deleted C:\*.*? echo 'You deleted C:\\*.*?'; // Outputs: You deleted C:\*.*? echo 'You deleted C:\*.*?'; // Outputs: This will not expand: \n a newline echo 'This will not expand: \n a newline'; // Outputs: Variables do not $expand $either echo 'Variables do not $expand $either'; ? |
If the string is enclosed in double-quotes ("), PHP
understands more escape sequences for special
characters:
表格 7-1. Escaped characters
Again, if you try to escape any other character, the
backslash will be printed too!
But the most important feature of double-quoted
strings is the fact that variable names will be expanded.
See
string parsing for details.
Another way to delimit strings is by using heredoc
syntax (" "). One should provide an identifier
after , then the
string, and then the same identifier to close the
quotation.
The closing identifier must begin in the first
column of the line. Also, the identifier used must follow
the same naming rules as any other label in PHP: it must
contain only alphanumeric characters and underscores, and
must start with a non-digit character or underscore.
|
Heredoc text behaves just like a double-quoted
string, without the double-quotes. This means that you do
not need to escape quotes in your here docs, but you can
still use the escape codes listed above. Variables are
expanded, but the same care must be taken when expressing
complex variables inside a here doc as with strings.
注: Heredoc support was added in PHP 4.
When a string is specified in double quotes or with
heredoc, variables
are parsed within it.
There are two types of syntax, a
simple one and a
complex one. The simple syntax is the most common and
convenient, it provides a way to parse a variable, an
array value, or an object property.
The complex syntax was introduced in PHP 4, and can
be recognised by the curly braces surrounding the
expression.
If a dollar sign ($) is
encountered, the parser will greedily take as much
tokens as possible to form a valid variable name.
Enclose the variable name in curly braces if you want
to explicitly specify the end of the name.
?php $beer = 'Heineken'; echo "$beer's taste is great"; // works, "'" is an invalid character for varnames echo "He drank some $beers"; // won't work, 's' is a valid character for varnames echo "He drank some ${beer}s"; // works echo "He drank some {$beer}s"; // works ? |
Similarly, you can also have an
array index or an object property parsed. With
array indices, the closing square bracket (]) marks the end of the index. For
object properties the same rules apply as to simple
variables, though with object properties there doesn't
exist a trick like the one with variables.
?php // These examples are specific to using arrays inside of strings. // When outside of a string, always quote your array string keys // and do not use {braces} when outside of strings either. // Let's show all errors error_reporting(E_ALL); $fruits = array('strawberry' = 'red', 'banana' = 'yellow'); // Works but note that this works differently outside string-quotes echo "A banana is $fruits[banana]."; // Works echo "A banana is {$fruits['banana']}."; // Works but PHP looks for a constant named banana first // as described below. echo "A banana is {$fruits[banana]}."; // Won't work, use braces. This results in a parse error. echo "A banana is $fruits['banana']."; // Works echo "A banana is " . $fruits['banana'] . "."; // Works echo "This square is $square- width meters broad."; // Won't work. For a solution, see the complex syntax. echo "This square is $square- width00 centimeters broad."; ? |
For anything more complex, you should use the
complex syntax.
This isn't called complex because the syntax is
complex, but because you can include complex
expressions this way.
In fact, you can include any value that is in the
namespace in strings with this syntax. You simply write
the expression the same way as you would outside the
string, and then include it in { and }. Since you can't
escape '{', this syntax will only be recognised when
the $ is immediately following the {. (Use "{\$" or
"\{$" to get a literal "{$"). Some examples to make it
clear:
?php // Let's show all errors error_reporting(E_ALL); $great = 'fantastic'; // Won't work, outputs: This is { fantastic} echo "This is { $great}"; // Works, outputs: This is fantastic echo "This is {$great}"; echo "This is ${great}"; // Works echo "This square is {$square- width}00 centimeters broad."; // Works echo "This works: {$arr[4][3]}"; // This is wrong for the same reason as $foo[bar] is wrong // outside a string. In otherwords, it will still work but // because PHP first looks for a constant named foo, it will // throw an error of level E_NOTICE (undefined constant). echo "This is wrong: {$arr[foo][3]}"; // Works. When using multi-dimensional arrays, always use // braces around arrays when inside of strings echo "This works: {$arr['foo'][3]}"; // Works. echo "This works: " . $arr['foo'][3]; echo "You can even write {$obj- values[3]- name}"; echo "This is the value of the var named $name: {${$name}}"; ? |
Strings may be concatenated using the '.' (dot)
operator. Note that the '+' (addition) operator will not
work for this. Please see String operators for
more information.
There are a lot of useful functions for string
modification.
See the string functions
section for general functions, the regular expression
functions for advanced find replacing (in two tastes:
Perl and POSIX extended).
There are also functions for
URL-strings, and functions to encrypt/decrypt strings
(mcrypt and mhash).
Finally, if you still didn't find what you're looking
for, see also the character type
functions.
You can convert a value to a string using the (string) cast, or the strval()
function. String conversion is automatically done in the
scope of an expression for you where a string is needed.
This happens when you use the
echo() or print()
functions, or when you compare a variable value to a
string. Reading the manual sections on Types and Type Juggling will
make the following clearer. See also
settype().
A boolean
TRUE value is converted to the string "1", the
FALSE value is represented as
"" (empty string). This way you can convert back and
forth between boolean and string values.
An integer or a floating point number (float)
is converted to a string representing the number with its
digits (including the exponent part for floating point
numbers).
Arrays are always converted to the string "Array", so you cannot dump out the contents
of an
array with echo() or
print() to see what is inside
them. To view one element, you'd do something like
echo $arr['foo']. See below for tips
on dumping/viewing the entire contents.
Objects are always converted to the string "Object". If you would like to print out the
member variable values of an object
for debugging reasons, read the paragraphs below. If you
would like to find out the class name of which an object is
an instance of, use get_class().
Resources are always converted to strings with the
structure "Resource id #1" where
1 is the unique number of the
resource assigned by PHP during runtime. If you
would like to get the type of the resource, use
get_resource_type().
NULL is always
converted to an empty string.
As you can see above, printing out the arrays, objects
or resources does not provide you any useful information
about the values themselfs. Look at the functions
print_r() and var_dump() for better ways to
print out values for debugging.
You can also convert PHP values to strings to store
them permanently. This method is called serialization, and
can be done with the function
serialize(). You can also serialize PHP values to
XML structures, if you have
WDDX support in your PHP setup.
When a string is evaluated as a numeric value, the
resulting value and type are determined as follows.
The string will evaluate as a float
if it contains any of the characters '.', 'e', or 'E'.
Otherwise, it will evaluate as an integer.
The value is given by the initial portion of the
string. If the string starts with valid numeric data, this
will be the value used. Otherwise, the value will be 0
(zero). Valid numeric data is an optional sign, followed by
one or more digits (optionally containing a decimal point),
followed by an optional exponent. The exponent is an 'e' or
'E' followed by one or more digits.
?php $foo = 1 + "10.5"; // $foo is float (11.5) $foo = 1 + "-1.3e3"; // $foo is float (-1299) $foo = 1 + "bob-1.3e3"; // $foo is integer (1) $foo = 1 + "bob3"; // $foo is integer (1) $foo = 1 + "10 Small Pigs"; // $foo is integer (11) $foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2) $foo = "10.0 pigs " + 1; // $foo is float (11) $foo = "10.0 pigs " + 1.0; // $foo is float (11) ? |
For more information on this conversion, see the Unix
manual page for strtod(3).
If you would like to test any of the examples in this
section, you can cut and paste the examples and insert the
following line to see for yourself what's going on:
Do not expect to get the code of one character by
converting it to integer (as you would do in C for
example). Use the functions ord() and chr() to
convert between charcodes and characters.