1. 代码演绎PHP的8种变量类型与常量。2.变量作用域与PHP流程控制。
1. 代码演绎PHP的8种变量类型与常量。
<?php
//!数据类型 4种标准类型 整型 浮点型 字符串 布尔
echo '<pre>';
$price=4800;
echo $price;
var_dump($price);//int(4800)
$price=89.99;
var_dump($price);//float(89.99)
$flag=true;
var_dump($flag);//bool(true)
$username='admin';
var_dump($username);//string(5) "admin"
//php变量是大小写敏感 php函数不大小写敏感
/**
* echo 输出一个或者多个字符串
* var_dump()打印值的结构、类型、值,用于任何类型,多变量
* print_r() 打印人类可读的变量信息 用于数组 第二个参数为 true,print_r() 将返回信息,而不是打印它,返回 string
* var_export()输出或返回变量的可解析字符串表示
*/
$arr = ['php', 'java', 'nodejs'];
$return = print_R($arr, true);
echo $return;
var_dump($arr);
// var_dump([1, 2, 3, 4]);
var_export($arr);
//! 2 数组 对象
// 数组 根据键名,可分为索引数组,关联数组
// 索引数组 int
echo '<pre>';
$data = [1, 2, 3, 4, 44, 33];
$data = ['前端', '后端', '数据库', '运维'];
var_dump($data);
// 关联数组 string
$navs = ['id' => 1, 'name' => '前端', 'url' => 'front-end.php'];
var_dump($navs);
$navs = [
0 => ['id' => 1, 'name' => '前端', 'url' => 'front-end.php'],
1 => ['id' => 2, 'name' => '后端', 'url' => 'back-end.php'],
2 => ['id' => 3, 'name' => '数据库', 'url' => 'data.php'],
3 => ['id' => 4, 'name' => '运维', 'url' => 'operation.php']
];
var_dump($navs);
// ! 数组遍历 for
$nav = '';
for ($i = 0; $i < count($navs); $i++) {
$nav .= "<a href='{$navs[$i]['url']}' style='padding: 0 15px' >{$navs[$i]['name']}</a>";//需要加花括号才能解析
}
echo $nav;
ob_clean();
echo '<pre>';
//! foreach
$nav = '';
foreach ($navs as $v) {
// var_dump($k, $v);
$nav .= "<a href='{$v['url']}' style='padding: 0 15px' >{$v['name']}</a>";
}
echo $nav;
// ! list() 把数组中的值赋给一组变量 不是真正的函数,而是语言结构
$names = array('西门', '灭绝', '欧阳', '天蓬');
$num = count($names);//返回数组的数量
list($a, $b, $c, $d) = $names;
echo "{$a},{$b},{$c},{$d}是PHP中文网的{$num}位老师";
// ! extract() 从数组中将变量导入到当前的符号表 此函数会将键名当作变量名,值作为变量的值。 不要对不可信的数据使用 extract(),类似用户输入 (例如 $_GET、$_FILES)。
$final = ['id' => 1, 'name' => '前端', 'url' => 'front-end.php'];
extract($final);
echo $id, $name, $url;
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="test.php" method="post">
<label for="uname">用戶名</label>
<input type="text" name="uname" id="uname">
<label for="pwd">密碼</label>
<input type="password" name="pwd" id="pwd">
<button>提交</button>
</form>
</body>
</html>
对象, resource , null的应用
<?php
ob_clean();
// !對象 对象是类实例化(new)的结果, 类是具有相同属性和行为的一组对象的集合
class NbaPlay
{
public $name;//公开
private $team;//保密
public function __construct($team)
{
$this->team = $team;
}
public function play()
{
return $this->name . '在' . $this->team . ' ,正在打比赛<br>';
}
}
$p = new NbaPlay('湖人队');
$p->name = 'James';
echo $p->play();
var_dump($p);
// object(NbaPlay)#1 (2) { ["name"]=> string(5) "James" ["team":"NbaPlay":private]=> string(9) "湖人队" }
// ! resource , null
$fp = fopen('test.php', 'r');
var_dump($fp); // resource(3) of type (stream)
// null 空 != false != 0 != ''
@var_dump($emp);
$var = null;
unset($fp);//释放变量
@var_dump($fp);
2.变量作用域与PHP流程控制
变量作用域
<?php
/**
* 变量作用域
*/
define('NATION', '中国');
function demo()
{
// $a,$b是定义在函数内部,属于局部变量 只在函数内部访问有效
$a = 100;
$b = 200;
echo ($a + $b);
}
demo();
// echo $a, $b;//非法访问,在函数外部不能访问到布局变量
// 全局变量 无法在函数内部直接调用
$one = 100;
$two = 200;
function test()
{
// 1. global
global $one, $two;
echo "运算结果是" . ($one + $two);
// 2. $GLOBALS超全布变量
echo "运算结果是" . ($GLOBALS['one'] + $GLOBALS['two']);
echo NATION; //说明常量不受作用域限制
}
test();
var_dump($_GET);
ob_clean();
echo '<pre>';
print_r(get_defined_vars(true));
//系统预定义变量
// 超全局变量: 数组,任何地方都可以访问,不受作用域限制
// $GLOBALS: 引用全局作用域中可用的全部变量
// $_SERVER: 服务器和执行环境信息
// $_GET :通过 URL 参数(又叫 query string)传递给当前脚本的变量的数组
// $_POST:当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前脚本
// $_FILES:通过 HTTP POST 方式上传到当前脚本的项目的数组
// $_COOKIE:通过 HTTP Cookies 方式传递给当前脚本的变量的数组
// $_SESSION:当前脚本可用 SESSION 变量的数组
// $_REQUEST: 默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组
// $_ENV: 通过环境方式传递给当前脚本的变量的数组
PHP流程控制
<?php
/**
* php流程控制结构
*/
//!1. 单一条件分支结构
// if(条件表达式 true)
// {
// #满足条件执行的代码块
// }
if (1 == 1) {
echo 111;
}
//! 2.双向条件分支结构 if...else
// if(条件表达式)
// {
// #满足条件执行的代码块
// } else{
#不满足条件执行的代码块
// }
// if():
// endif;
//3. 多向条件分支结构 if elseif elseif else
$age = 85;
$gender = '女';
if ($gender == '女' && $age < 55) :
echo "您好女士,距离您退休还有" . (55 - $age) . "年<br>";
elseif ($gender == '女' && $age > 55) :
echo "您好女士,您已经退休" . ($age - 55) . "年了<br>";
elseif ($gender == '男' && $age < 60) :
echo "先生您好,距离您退休还有" . (60 - $age) . "年<br>";
elseif ($gender == '男' && $age > 60) :
echo "先生您好 ,您已经退休" . ($age - 60) . "年了<br>";
else :
echo '很抱歉,您输入的信息不正确';
endif;
ob_clean();
$d = date("w"); //0-6
switch ($d):
case 1:
echo '今天是工作日星期一';
break;
case 2:
echo '今天是工作日星期二';
break;
case 3:
echo '今天是工作日星期三';
break;
case 4:
echo '今天是工作日星期四';
break;
case 5:
echo '今天是工作日星期五';
break;
default:
echo "今天休息!";
endswitch;
// break 退出当前循环 continue 跳过此次循环,进入下一轮循环