主要内容
- 基本PHP程序结构(函数(代码)-执行)
- 变量命名、检测、删除
- 变量的数据类型及类型转化
- 变量值的传递
1、PHP程序的基本结构
如之前说的,程序的基本结构是:数据(变量)-代码(函数)-执行(返回结果)。
示例:
// 代码
function sum(int $a, int $b), int($c) {
// 返回结果给调用者
return "{$a}、{$b}、{$c}三者之和是:" . ($a + $b);
}
// 执行,将执行结果打印输出
echo sum(10, 20, 110);
- 返回(php打印输出):echo-print-var_dump
三者的区别示例
// echo 回显,效率最高。但没有返回值
$email = 'admin@abc.com';
echo $email, '<br>';
echo '<span style="color:red">'.$email.'</span>';
echo '<hr>';
// print与echo 区别
// 1. echo 可以打印多个变量,且没有返回值
// 2. print 仅能打印单个变量, 返回1
echo print $email;
echo '<hr>';
echo gettype($email), '<br>';
// var_dump()想获取到变量的完整的信息
var_dump($email);
var_dump(123);
echo '<hr>';
// var_export(): 返回一个变量的字符串表示(源代码)
var_export($email);
2. 变量命名、检测、删除
- 变量命名
变量是临时存储数据的容器
变量是实现数据复用的手段
<?php
$username = 'admin';
$userName = 'Tom';
// ① 变量区分大小写
echo $username,'<br>', $userName, '<hr>';
// 函数是不区分大小写
echo strtoupper($userName);
echo STRTOUPPER($userName);
// ② 变量名必须以"$"开始
// hello = 'php';
// 变量标识符不允许用数字开始
// $123aaa = '张三';
// 变量允许使用下划线开始
$_email = 'abc@qq.com';
// ③ 变量名不允许使用特殊字符,@
// $user@id = 'abc';
// ④ 变量标识符: $开始,仅允许字母,下划线和数字,且不允许使用数字开始
$我的邮箱 = 'Tom@abc.com';
// 中文可以用作变量名,但不推荐
echo $我的邮箱;
// 无意义, 不要用,变量名要望文生义
$aaa = 'abc.com';
$_ = 123;
- 变量检测与删除
// 打开所有的报错
error_reporting(E_ALL);
// echo $username;
// 变量检测
$username = '王大牛';
$username = null;
// isset():如果该变量存在且值不为null才是true
if (isset($username)) echo $username. '<br>';
else echo '没有定义该变量'.'<hr>';
// unset():删除变量, 没有返回值
// unset($username);
// echo $username;
$var = '';
if (empty($var)) var_dump($var). '<br>';
3. 变量的数据类型及类型转化
(1)数据类型
// 数据类型
// 基本类型, 复合类型, 特殊类型
// ①. 基本类型
// 字符串
$name = '手机';
// 数值
$salesnum = 2980;
// 布尔
$is5G = false;
// ②. 复合类型, 对象,数组
// 对象
$obj = new stdClass;
// 对象是属性和方法的无序集合
$obj->name = 'Tom zhu';
$obj->age = 35;
echo $obj->name, '<hr>';
// 数组
$arr = ['电脑', 4500, 'Dell'];
// print_r()以人性化的方式打印变量,true表示不直接打印,而返回
// 返回就是一定要有一个接收者
$str = print_r($arr, true);
echo '<pre>'.$str.'</pre>';
// 基本类型: 标量, 单值
// 复合类型: 多值,
// ③. 特殊类型
// NULL
$num = null;
var_dump($num);
// $f就是文件资源类型
$f = fopen('demo2.php', 'r');
var_dump($f);
echo gettype($f);
(2)变量的类型转化
变量可以直接随着赋值性质的变化而变化,也可以随着被操作过程的情况而变化。
- 第一种:随着赋值性质的变化而变化
// 变量的动态: 是指变量的类型可以随值而变化
$var = 100;
var_dump($var);
echo '<hr>';
$var = 'abc.com';
var_dump($var);
- 第二种:随着被操作过程的情况而变化
// ① 自动转换: 由php系统后台进行,不需要用户主动参与
$a = null;
$b = true;
$c = false;
$d = '5g';
$e = 'php';
$f = 15;
// null在算术运算中自动转为0
echo $a + 10, '<br>';
// true在算术运算中转为1
echo $b + 10, '<br>';
// echo $d + 10, '<br>';
// echo $e + 10, '<br>';
// . : 字符串连接操作
echo $e . $f, '<br>';
echo '<hr>';
// ② 强制转换:如果不想看到警告,通过强制转换解决
echo (int)$e + 10, '<br>';
echo intval($e) + 20, '<br>';
echo strval($f) . ' hello';
echo gettype($f);
echo '<hr>';
// ③ 永久转换
settype($f, 'string');
echo gettype($f);
(3)变量的动态传递创建
达到$email = ‘admin@abc.com’这个效果的另外一种方式如下,从中可以看到变量名以赋值的方式
$var = 'email';
$$var = 'admin@abc.com';
echo $email;
4. 变量值的传递
两种方式:有值传递、引用传递
// ①. 值传递,也是默认的方式
$salesnum1 = 8999;
$salesnum2 = $salesnum1;
// 更新salesnum2
$salesnum2 = 9999;
// 查看salesnum1
echo 'salesnum1 = ' . $salesnum1 . '<hr>';
// ②. 引用传递
$salesnum1 = 99;
// 在等号的右边/右值前面加上&(取地址符)
// 当前$salesnum2中保存的并不是99, 而是$salesnum1变量
//在内存中的地址, [0xabcd1234] = 99
$salesnum2 = &$salesnum1;
// 更新salesnum2
$salesnum2 = 9999;
// 查看salesnum1, 会发现print1与salesnum2同步更新了
echo 'salesnum1 = ' . $salesnum1 . '<hr>';