php 变量
php 有 8 种变量类型:
- 4 种标量类型:字符串、布尔、整型、浮点型
- 2 种复合类型:数组、对象
- 2 种特殊类型:资源(resource)、空(null)
php 变量名以 $
开头,声明的时候需要同时赋值:$userName = ‘Peter’。
变量名大小写敏感。(函数名大小写不敏感)
php 变量是弱类型,其类型由赋给它的值决定,且变量赋值后可以再次赋值不同类型的值,以改变变量的类型。
$userName = 'Peter';
var_dump($userName); // string(5) "Peter"
$userName = 58;
var_dump($userName); // int(58)
可以使用 unset() 来释放变量
标量类型
1)字符串 string
$userName = 'Peter';
var_dump($userName); // string(5) "Peter"
2)布尔 bool
$boo = true;
var_dump($boo); // bool(true)
3)整型 int
$int = 58;
var_dump($int); // int(58)
4)浮点型 float
$price = 99.99;
var_dump($price); // float(99.99)
复合类型
5)数组 array
声明
根据键名,分为索引数组和关联数组。按数组维度,分为一维数组和多维数组
声明方式:$arr = [‘key’=>’value’,…] 或者 $arr = array(‘key’=>’value’,…)
- 索引数组,键名为默认的数字(0,1,2…)
$arr = ['php','java','python'];
// 索引数组声明时 key 可以省略
// 等同于:$arr = [0=>'php',1=>'java',2=>'python'];
var_dump($arr);
// array(3) { [0]=> string(3) "php" [1]=> string(4) "java" [2]=> string(6) "python" }
- 关联数组:键名为自定义的字符串
$arr = array('id'=>1,'name'=>'admin','email'=>'admin@qq.com');
print_r($arr);
// 输出:
// Array
// (
// [id] => 1
// [name] => admin
// [email] => admin@qq.com
// )
- 一维数组:上述两例都是一维数组,每个键对应的值都是标量类型
- 多维数组:一个或多个键对应的值也是数组
// 二维数组
$arr = [
'id'=>1,
'name'=>'admin',
'info'=>['gender'=>'male','age'=>28,'email'=>'admin@qq.com']
];
print_r($arr);
// 输出:
// Array
// (
// [id] => 1
// [name] => admin
// [info] => Array
// (
// [gender] => male
// [age] => 28
// [email] => admin@qq.com
// )
// )
遍历
1)for 循环
$navs = ['首页', '视频教程', '学习路径', 'PHP培训新', '资源下载', '技术文章'];
$nav = '';
for ($i = 0; $i < count($navs); $i++){
$nav .= "<a href='' style='padding:0 15px'>$navs[$i]</a>";
}
echo $nav;
// 输出:
// <a href='' style='padding:0 15px'>首页</a>
// <a href='' style='padding:0 15px'>视频教程</a>
// <a href='' style='padding:0 15px'>学习路径</a>
// <a href='' style='padding:0 15px'>PHP培训新</a>
// <a href='' style='padding:0 15px'>资源下载</a>
// <a href='' style='padding:0 15px'>技术文章</a>
2)foreach
$navs = [
['id' => 1, 'name' => '视频教程', 'url' => 'https://www.php.cn/course.html'],
['id' => 2, 'name' => '学习路径', 'url' => 'https://www.php.cn/map.html'],
['id' => 3, 'name' => 'PHP培训新', 'url' => 'https://www.php.cn/k.html'],
['id' => 4, 'name' => '资源下载', 'url' => 'https://www.php.cn/xiazai/']
];
$nav = '';
foreach ($navs as $k => $v) {
$nav .= "<a href='{$v['url']}' style='padding:0 15px'>{$v['name']}</a>";
}
echo $nav;
// 输出:
// <a href="https://www.php.cn/course.html" style="padding:0 15px">视频教程</a>
// <a href="https://www.php.cn/map.html" style="padding:0 15px">学习路径</a>
// <a href="https://www.php.cn/k.html" style="padding:0 15px">PHP培训新</a>
// <a href="https://www.php.cn/xiazai/" style="padding:0 15px">资源下载</a>
// 简化
// extract() — 从关联数组中提取一个成员,把成员的键当作变量的名称,成员的值当作变量的值
// 不能是索引数组,因为 php 变量名不能以数字开始
// 注意:不要对不可信的数据使用 extract(),如用户输入数据($_GET、$_POST)
foreach ($navs as $k => $v) {
extract($v);
$nav .= "<a href='{$url}' style='padding:0 15px'>{$name}</a>";
}
echo $nav;
// 输出同上
3)list()
list() ,语言结构,将数组的值批量赋值给一组变量。
$arr = ['php', 'java', 'python'];
list($php, $java, $py) = $arr;
echo "{$php},{$java},{$py}是编程界比较受欢迎的后端语言";
// php,java,python是编程界比较受欢迎的后端语言
6)对象 object
对象是类实例化的结果,类是具体相同属性和行为的一组对象的集合,用来表示一个应用中进行操作的实体项目,例如:NBA 球员
// 定义类
class NbaPlayer
{
private $name;
public $team;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
// 类只是一个模板,不能对其本身进行实际操作
// 需要基于这个模板创建(实例化)对象,使用 new 关键词
$james = new NbaPlayer;
// 然后就可以对创建的对象进行操作
$james -> setName('James');
$james -> team = 'Lakers';
echo $james -> getName(); // James
echo $james -> team; // Lakers
特殊类型
7)资源类型 resource
保存了外部资源的一个引用,例如:fopen() 打开的文件资源,new PDO 创建的数据库连接,curl_init() 获取的 cURL 句柄等。
// 打开:fopen(fileneme, mode)
// 参数 r :只读方式打开,将文件指针指向文件头。成功时返回文件指针资源
$handle = fopen('data.txt', 'r');
var_dump($handle); // resource(5) of type (stream)
// 读取:fread($handle, length),length:要读取的字节长度
// UTF-8 编码中,一个中文汉字占 3 个字节
$con = fread($handle, 11); // 注意:读取后指针位置会移动到 12,继续读取时从 12 开始
echo $con; // 我的qq密
// 读取全部:fread($handle, filesize(filename))
// 前面不能有 fread
$con = fread($handle, filesize('data.txt'));
echo $con; // 我的qq密码是zhoujielun521125
8)空 null
// ! null 不是指 0 false ''
// 1,访问未定义的变量
@var_dump($password); // $password 未定义
// 输出:NULL
// @ 抑制错误
// 2,显式申明
$pdo = null;
var_dump($pdo); // NULL
// 3,访问被释放后的变量(等同于未定义)
$uname = 'Peter';
unset($uname);
@var_dump($uname); // NULL