Skip to main content
Version: php

变量

<?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;