PHP是一种弱类型语言,变量不需要声明类型,PHP会根据值自动确定类型。理解变量的概念是学习编程的基础。
变量是程序中存储数据的容器,可以理解为内存中的一个命名空间。在PHP中,变量具有以下特点:
理解变量的生命周期对于编写高效的PHP代码非常重要:
<?php
// 变量以$符号开头
$name = "张三";
$age = 25;
$_private = "私有变量";
$userName123 = "用户名";
// 错误的命名
// $123name = "错误"; // 不能以数字开头
// $user-name = "错误"; // 不能包含连字符
// $user name = "错误"; // 不能包含空格
?>
$userName 而不是 $un$firstName 或下划线:$first_namedefine('MAX_SIZE', 100);$class、$function等PHP支持8种原始数据类型:
<?php
// 单引号字符串(不解析变量)
$str1 = 'Hello World';
$name = 'PHP';
echo 'Hello $name'; // 输出:Hello $name
// 双引号字符串(解析变量)
$str2 = "Hello World";
echo "Hello $name"; // 输出:Hello PHP
// 字符串连接
$fullName = "张" . "三"; // 使用点号连接
echo "姓名:{$fullName}"; // 花括号包裹变量
// Heredoc语法(多行字符串)
$html = <<<HTML
<div>
<h1>标题</h1>
<p>内容:$name</p>
</div>
HTML;
// Nowdoc语法(不解析变量)
$text = <<<'TEXT'
这是原始文本
$name 不会被解析
TEXT;
?>
<?php
$decimal = 123; // 十进制
$octal = 0123; // 八进制(以0开头)
$hex = 0x1A; // 十六进制(以0x开头)
$binary = 0b1010; // 二进制(以0b开头)
// 整数范围
echo PHP_INT_MAX; // 最大整数值
echo PHP_INT_MIN; // 最小整数值
echo PHP_INT_SIZE; // 整数字节数
// 类型检查
var_dump(is_int(123)); // bool(true)
var_dump(is_integer(123)); // bool(true)
?>
<?php
$float1 = 3.14;
$float2 = 2.5e3; // 科学计数法:2.5 × 10³ = 2500
$float3 = 7E-10; // 0.0000000007
// 浮点数精度问题
$a = 0.1 + 0.2;
var_dump($a == 0.3); // bool(false) - 浮点数精度问题
// 正确的比较方式
$epsilon = 0.00001;
var_dump(abs($a - 0.3) < $epsilon); // bool(true)
// 类型检查
var_dump(is_float(3.14)); // bool(true)
var_dump(is_double(3.14)); // bool(true)
?>
<?php
$isTrue = true;
$isFalse = false;
// 以下值被视为false
var_dump((bool)0); // false
var_dump((bool)0.0); // false
var_dump((bool)""); // false
var_dump((bool)"0"); // false
var_dump((bool)null); // false
var_dump((bool)[]); // false(空数组)
// 其他值都为true
var_dump((bool)1); // true
var_dump((bool)-1); // true
var_dump((bool)"false"); // true(非空字符串)
var_dump((bool)[0]); // true(非空数组)
?>
<?php
// 索引数组
$colors = ["红色", "绿色", "蓝色"];
$numbers = array(1, 2, 3, 4, 5);
// 关联数组
$person = [
"name" => "张三",
"age" => 25,
"city" => "北京"
];
// 多维数组
$users = [
["name" => "张三", "age" => 25],
["name" => "李四", "age" => 30]
];
// 访问数组元素
echo $colors[0]; // 红色
echo $person["name"]; // 张三
echo $users[0]["age"]; // 25
?>
<?php
class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
public function sayHello() {
return "你好,我是{$this->name}";
}
}
$person = new Person("张三", 25);
echo $person->name; // 张三
echo $person->sayHello(); // 你好,我是张三
?>
<?php
$var1 = null; // 显式赋值为null
$var2; // 未初始化的变量
unset($var3); // 被unset的变量
// 检查null
var_dump(is_null($var1)); // bool(true)
var_dump(isset($var1)); // bool(false)
var_dump(empty($var1)); // bool(true)
// null合并运算符(PHP 7+)
$username = $_GET['user'] ?? 'guest'; // 如果不存在则使用默认值
?>
<?php
// 文件资源
$file = fopen("test.txt", "r");
var_dump(is_resource($file)); // bool(true)
fclose($file);
// 数据库连接资源
$conn = mysqli_connect("localhost", "user", "pass", "db");
var_dump(get_resource_type($conn)); // mysql link
mysqli_close($conn);
?>
<?php
// PHP会自动进行类型转换
$result = "10" + 5; // int(15) - 字符串转为整数
$result = "10.5" + 2; // float(12.5)
$result = "10 apples" + 5; // int(15) - 提取数字部分
$result = "hello" + 5; // int(5) - 无法转换则为0
?>
<?php
$str = "123";
// 方式1:使用类型转换运算符
$int = (int)$str;
$float = (float)$str;
$bool = (bool)$str;
$array = (array)$str;
// 方式2:使用转换函数
$int = intval($str);
$float = floatval($str);
$str = strval(123);
// 方式3:使用settype函数
$var = "123";
settype($var, "integer");
var_dump($var); // int(123)
?>
<?php
$var = "Hello";
// 检查具体类型
is_string($var); // 是否为字符串
is_int($var); // 是否为整数
is_float($var); // 是否为浮点数
is_bool($var); // 是否为布尔值
is_array($var); // 是否为数组
is_object($var); // 是否为对象
is_null($var); // 是否为null
is_resource($var); // 是否为资源
// 检查数值类型
is_numeric("123"); // true - 是否为数字或数字字符串
is_scalar($var); // true - 是否为标量(int/float/string/bool)
// 获取类型
gettype($var); // 返回类型名称字符串
get_debug_type($var); // PHP 8+ 更详细的类型信息
?>
<?php
function test() {
$local = "局部变量";
echo $local; // 正常访问
}
test();
// echo $local; // 错误:未定义变量
?>
<?php
$global = "全局变量";
function test() {
global $global; // 声明使用全局变量
echo $global;
// 或使用$GLOBALS数组
echo $GLOBALS['global'];
}
test();
?>
<?php
function counter() {
static $count = 0; // 静态变量保持值
$count++;
echo $count . "\n";
}
counter(); // 输出:1
counter(); // 输出:2
counter(); // 输出:3
?>
<?php
// 使用define()定义常量
define("SITE_NAME", "我的网站");
define("MAX_SIZE", 100);
define("PI", 3.14159);
echo SITE_NAME; // 我的网站
// 使用const关键字(类内部或顶级作用域)
const APP_VERSION = "1.0.0";
const DEBUG = true;
// 魔术常量
echo __FILE__; // 当前文件的完整路径
echo __DIR__; // 当前文件所在目录
echo __LINE__; // 当前行号
echo __FUNCTION__; // 当前函数名
echo __CLASS__; // 当前类名
echo __METHOD__; // 当前方法名
?>
<?php
$var = "hello";
$$var = "world"; // 创建变量$hello
echo $hello; // 输出:world
echo $$var; // 输出:world
// 实际应用
$field = "username";
$$field = "张三";
echo $username; // 输出:张三
?>
$name 和 $Name 是不同的变量