变量
<?php
$var = 'Bob';
$Var = 'Joe';
echo "$var, $Var"; // 输出 "Bob, Joe"
数据类型
PHP 支持 10 种原始数据类型。
四种标量类型:
bool(布尔型) int(整型) float(浮点型,也称作 double) string(字符串)
四种复合类型:
array(数组) object(对象) callable(可调用) iterable(可迭代)
两种特殊类型:
resource(资源) NULL(无类型)
Boolean 布尔类型
这是最简单的类型。bool 表达了真值,可以为 true 或 false。
语法 要指定一个 bool,使用常量 true 或 false。两个都不区分大小写。
<?php
$foo = True; // 设置 $foo 为 TRUE
?>
Integer 整型
int 是集合 ℤ = {..., -2, -1, 0, 1, 2, ...} 中的某个数。
<?php
$a = 1234; // 十进制数
$a = 0123; // 八进制数 (等于十进制 83)
$a = 0o123; // 八进制数 (PHP 8.1.0 起)
$a = 0x1A; // 十六进制数 (等于十进制 26)
$a = 0b11111111; // 二进制数字 (等于十进制 255)
$a = 1_234_567; // 整型数值 (PHP 7.4.0 以后)
?>
Float 浮点型
浮点型(也叫浮点数 float,双精度数 double 或实数 real)可以用以下任一语法定义:
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
$d = 1_234.567; // 从 PHP 7.4.0 开始支持
?>
String 字符串
一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。
单引号
定义一个字符串的最简单的方法是用单引号把它包围起来(字符 '
)。
<?php
echo 'this is a simple string';
// 可以录入多行
echo 'You can also have embedded newlines in
strings this way as it is
okay to do';
双引号
如果字符串是包围在双引号(")中, PHP 将对以下特殊的字符进行解析:
<?php
$juice = "apple";
echo "He drank some $juice juice.".PHP_EOL;
// Invalid. "s" is a valid character for a variable name, but the variable is $juice.
echo "He drank some juice made of $juices.";
// Valid. Explicitly specify the end of the variable name by enclosing it in braces:
echo "He drank some juice made of ${juice}s.";
以上例程会输出:
He drank some apple juice.
He drank some juice made of .
He drank some juice made of apples.
Heredoc 结构
第三种表达字符串的方法是用 heredoc 句法结构:<<<
。
/* 含有变量的更复杂示例 */
class foo
{
var $foo;
var $bar;
function __construct()
{
$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;
输出
My name is "MyName". I am printing some Foo.
Now, I am printing some Bar2.
This should print a capital 'A': A
Nowdoc 结构
就象 heredoc 结构类似于双引号字符串,Nowdoc 结构是类似于单引号字符串的。
/* 含有变量的更复杂的示例 */
class foo
{
public $foo;
public $bar;
function __construct()
{
$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 not print a capital 'A': \x41
EOT;
?>
以上例程会输出:
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': \x41
数字字符串
如果一个 PHP string 可以被解释为 int 或 float 类型,则它被视为数字字符串。
$foo = 1 + "10.5"; // $foo 是 float (11.5)
Array 数组
PHP 中的 array 实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。
$array = array(
"foo" => "bar",
"bar" => "foo",
);
// 使用短数组语法
$array = [
"foo" => "bar",
"bar" => "foo",
];
Object 对象
对象初始化
要创建一个新的对象 object,使用 new 语句实例化一个类:
<?php
class foo
{
function do_foo()
{
echo "Doing foo.";
}
}
$bar = new foo;
$bar->do_foo();
?>
转换为对象
如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass
的实例。如果该值为 null
,则新的实例为空。 array 转换成 object 将使键名成为属性名并具有相对应的值
$obj = (object) array('1' => 'foo');
var_dump(isset($obj->{'1'})); // PHP 7.2.0 后输出 'bool(true)',之前版本会输出 'bool(false)'
var_dump(key($obj)); // PHP 7.2.0 后输出 'string(1) "1"',之前版本输出 'int(1)'
Iterable 可迭代对象
Iterable是 PHP 7.1 中引入的一个伪类型。
function bar(): iterable {
return [1, 2, 3];
}
$bar = bar();
foreach($bar as $elm) {
echo $elm . ' ';
}
Resource 资源类型
资源 resource 是一种特殊变量,保存了到外部资源的一个引用。
NULL
特殊的 null
值表示一个变量没有值。NULL 类型唯一可能的值就是 null
。
$var = NULL;