字符串的插值
<?php $name = "华硕电脑"; $price = 5199; echo "品名:".$name."<br>价格:".$price."元<br>"; // \n 换行 \r 回车 \t tab \\ \$ \' // 注意:单引号只能识别2个转义字符 \' , \\ // 单双引号区别:字符转移、变量解析、运行速度。 // 注意:这里的转义字符\n 在HTML中就是一个空格 // nl2br()他会在\n前面自动插入一个<br> $template = nl2br("品名:{$name}\n价格:{$price}元<br>"); echo $template; /* 品名:华硕电脑 价格:5199元 品名:华硕电脑 价格:5199元 */ // 定界符----------------------------- //Heredoc 方式声明字符串 $url = " http://zhang.com/0427/demo.php"; $str = <<< EOF 我的 url:{$url} EOF; echo $str3; // http://zhang.com/0427/demo.php // heredoc: 双引号字符串替代语法 // 比较适合输出大量的多行内部存在变量的html代码 echo <<< SHOW <table border="1" width='200'> <tr> <th>品名</th> <th>价格</th> </tr> <tr> <td>{$name}</td> <td>{$price}</td> </tr> </table> SHOW; // SHOW: 必须要写在第一列最开头顶格,必须要与起始的名称一致 // nowdoc:单引号替代语法 echo <<< 'EOF' <table border="1" width='200'> <tr> <th>品名</th> <th>价格</th> </tr> <tr> <td>手机</td> <td>1599</td> </tr> </table> EOF; // nowdoc:适合大段的多行的字符串字面量的输出 ?>
总结:
运算符是指通过一个或多个表达式来产生另外一个值的某些符号,如“+”、“%”、“.”等都是运算符。
<?php $a = 10; $b = 2; echo $a+$b; // 12 加 echo $a-$b; // 8 减 echo $a*$b; // 20 乘 echo $a/$b; // 5 除 echo $a%4; // 2 求余 echo -6%4; // -2 // 判断今年是否为闰年 (年份能被4整除,但不能被100整除,或者能被400整除) $year = date("Y"); if($year%4==0&&$year%100!=0||$year%400==0){ echo "{$year}年是闰年"; }else{ echo "{$year}年是平年"; } // 生成一定范围内的随机数 0~100 echo mt_rand()%101; echo mt_rand(0,100); // 自增自减运算符 $a = 10; echo $a++,"---",$a; // 10---11 先返回输出完在自增 echo ++$a,"---",$a; // 12---12 先自增完在返回输出 // 自减同理 echo $a--,"---",$a; // 12---11 echo --$a,"---",$a; // 10---10 // 幂运算 printf("2的4次方=%d<br>",2**4); // 2的4次方=16 ?>
<?php // 英文的 . 和 , 来连接字符串 echo "a"."b"."c"; //abc $str1 = "Hello"; $str2 = "World"; echo $str1," ",$str2; //Hello World $newStr = $str1,$str2; echo $newStr; //提示语法错误因为 “,” 是echo语句特有的 $newStr = $str1." ".$str2; echo $newStr; //Hello World ?>
<?php $a = 10; $b = 3; var_dump($a>$b); // bool(true) var_dump($a=2); // int(2) = 赋值,将等号右边赋值给左边 var_dump($a=="2"); // bool(true) == 值等于,类型不同会自动转换 var_dump($a==="2") // bool(false) === 全等于,必须类型和值完全相同 // strpos()查找指定字符串出现的位置 $str = "abcdefg"; $pos = strpos($str,'h'); // false 0 true 1 echo $pos===false? "未查找到指定字符!": "查找成功!"; ?>
<?php // x && y 与 如果 x 和 y 都为 true,则返回 true (&&===and) var_dump(3>2&&5>1); // bool(true) // 短路求值,第一个为假,第二个&&3>2永不执行 var_dump(2>3&&3>2); // bool(false) var_dump(3>2&&2>3); // bool(false) // x || y 或 如果 x 和 y 至少有一个为 true,则返回 true (||===or) var_dump(3>2||2>3); // bool(true) // ! x 非 如果 x 不为 true,则返回 true var_dump(!(3>2)); // bool(false) $username = "admin"; if(isset($username)&&$username === "admin"){ echo "欢迎管理员".$username; }else{ echo "请登录"; } unset($username); // 退出登录 echo !empty($username)?"欢迎登录成功!":"请登录"; ?>
<?php // x = y x = y 左操作数被设置为右侧表达式的值 $a = 18; // x += y x = x + y 加 $a += 2; // $a = $a + 2; // x -= y x = x - y 减 $a -= 2; // $a = $a - 2; // x *= y x = x * y 乘 $a *= 2; // $a = $a * 2; // x /= y x = x / y 除 $a /= 2; // $a = $a / 2; // x %= y x = x % y 模(除法的余数) $a %= 2; // $a = $a % 2; // a .= b a = a . b 连接两个字符串 $a .= 2; // $a = $a.2; $str = "zhang"; $str .= ".com"; // zhang.com ob_clean(); $list = "<ul>"; for ($i=1; $i < 5; $i++) { $list .= sprintf("<li>item%d</li>",$i); } $list .= "</ul>"; echo $list; /* <ul> <li>item1</li> <li>item2</li> <li>item3</li> <li>item4</li> </ul> */ ?>
抑制错误输出,同过@符号加到会产生错误的表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
<?php $var = 123; @settype($var,"undefined"); // php 中没有undefined类型,不加上@肯定会报错 echo gettype($var); echo var_export($var); ?>
<?php // (expr1) ? (expr2) : (expr3) // 如果exp1为真,执行?之后的exp2,否则执行:之后的exp3 $a = 12; $b = 45; $c = $a>$b?1:0; echo '$c='.$c ; // 检测页码 默认第一页 // $page = isset($_GET['page'])?$_GET['page']:1; // $page = @$_GET['page']?$_GET['page']:1; // null 合并运算符? 给null变量一个默认值 $page = $_GET['page']??1; echo "当前是第".$page."页"; // 太空舱运算符-------- $a = 15; $b = 25; // if($a>$b){ // echo 1; // }elseif($a<$b){ // echo -1; // }else{ // echo 0; // } // a<b -1 a>b 1 a=b 0 echo $a <=> $b; ?>
PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;
详情请查看此处
判断条件是否满足从而执行相应的语句代码
if else语句 单分支
<?php // if(exp) 执行一句代码 if(exp){ // 代码段; } // if...else if(exp){ // exp为true时执行代码段; }else{ // exp为false时执行代码段; } // if...elseif...else if(exp1){ // exp1为true时执行代码段; }else if(exp2){ // exp2为true时执行代码段; }elseif(exp3){ // exp3为true时执行代码段; }else{ // 以上exp都为false时会执行到此; } // if嵌套的形式 if(exp){ // 代码段; }else{ // 代码段; if(exp){ if(exp){ // 代码段; }else{ // 代码段; } } } // ------------------ // 模板语法:为了提高混合代码(HTML php)的整洁性 if(boolean): echo "string"; else: echo "string"; endif; <? if(true): ?> <?= "<p>早上好</p>" ?> <? else: ?> <?= "<p>晚上好</p>" ?> <? endif ?> ?>
switch语句 多分支
<?php switch(exp){ case 值1: // 代码段; break; case 值2: // 代码段; break; ... default: // 代码段; } // 当exp与case的值相同时,执行代码段 // 比对的时候是松散比对即 == 如 1(int) == "1"(str) $d = date("w"); switch ($d): case '1': echo "今天是星期一"; break; case '2': echo "今天是星期二"; break; case '3': echo "今天是星期三"; break; case '4': echo "今天是星期四"; break; case '5': echo "今天是星期五"; break; default: echo "今天是周末啦!"; break; endswitch; ?>
重复的事情或者有规律的事情要想到用循环
for循环语句
<?php for(exp1;exp2;exp3){ # code... } // exp1相当于初始化赋值,会无条件执行第一个表达式 // exp2在每次循环开始前求值,看exp2是否为true,如果为true执行循环体,否则for循环结束 // exp3做求值操作(增量或减量操作) // true时执行顺序:exp1>-exp2>-代码段>-exp3>-exp2>-代码段>-exp3... for($i=1;$i<=10;$i++){ echo $i."<br>"; } // 初始值;条件;步长 for ($i=1,$j=10; $i < $j ; $i++,$j--) { echo $i,"----",$j,"<br>"; } /* 1----10 2----9 3----8 4----7 5----6 */ ?>
while循环语句
<?php while(exp){ // 循环体; } $i = 1; while ( $i<= 10) { echo $i."<br>"; $i++; } $cities = ['安徽','上海',"武汉","北京","南京","合肥"]; echo current($cities); next($cities); echo current($cities); next($cities); echo current($cities); next($cities); echo current($cities); reset($cities); echo current($cities); // current() 返回数组当前指针指向的值,到末端返回false while ($i=current($cities)) { echo $i."<br>"; next($cities); // 往下移动指针 } var_export(current($cities)); // false 已移动到末尾 // 将数组的指针回位 reset($cities); ?>
do…while循环语句
<?php do{ 循环体; }while(exp); // 无条件的执行一次循环体,接着再来判断条件是否为true,为true的话继续执行循环体 $i = 1; do{ echo $i."<br>"; }while ($i<=10) ?> $cities = ['安徽','上海',"武汉","北京","南京","合肥"]; $i = 0; do{ echo $cities[$i]; $i++; }while($i<count($cities));
goto (跳转指定)
跳转到指定位置
continue(结束本次)
代表跳过当次循环执行下次循环,可应用于for语句、while语句和do…while语句
break (终止循环)
可以通过break结束for语句、while语句和do…while语句死循环。
<?php // continue 只是结束本次的循环程序,继续下一次 // 只输出十以内的偶数 for ($i=1; $i < 10; $i++) { if($i%2!=0){ continue; } echo $i."<br>"; } // 看下面这个条件显然是一个死循环 $i = 0; while (true) { // 当$i变量的值大于4的时候,我们就终止循环 if($i>4){ break; } echo $i."<br>"; $i++; } ?>
流程控制语句练习:
<?php // 输出100以内能被3整除的所有整数 for ($i=0; $i < 100; $i++) { if($i%3==0){ echo $i."<br>"; } } while ( $i < 100) { echo $i."<br>"; $i += 3; } // 输出100以内的偶数每行5个 for ($i=1,$j=0;$i <= 100 ; $i++) { if($i%2==0){ echo $i." "; $j++; if($j%5==0){ echo "<br>"; } } } // 已知有一百多人,每排三个剩1人,每排三人剩2人,每排五人剩3人,求可能是一百几十人? for ($i=100; $i < 200; $i++) { if($i%3==1&&$i%4==2&&$i%5==3){ echo $i."<br>"; } } // 猴子搬香蕉 for ($i=1,$x=100; $i <= 50; $i++) { if($x>50){ $x -= 3; }elseif($x<=50){ $x--; } printf("当走到%d米时,所剩香蕉%d根<br>",$i,$x); } // 水仙花数 for ($i=1; $i < 9 ; $i++) { for ($j=0; $j < 9 ; $j++) { for ($k=0; $k < 9; $k++) { if($i**3+$j**3+$k**3==$i*100+$j*10+$k){ echo ($i*100+$j*10+$k)."<br>"; } } } } // 白鸡白钱 for ($i=1; $i <= 18 ; $i++) { for ($j=1; $j <= 31 ; $j++) { $k = 100-$i-$j; if($i*5+$j*3+$k/3==100){ printf("公鸡%d,母鸡%d,小鸡%d<br>",$i,$j,$k); } } } // 九九乘法表 for ($i=1; $i <= 9; $i++) { for ($j=1; $j <= $i ; $j++) { printf("%d*%d=%d ",$j,$i,$i*$j); } echo "<br>"; } ?>
include和require引入外部文件的区别?
User.php
class User{ public $name; public function __construct($name){ $this->name = $name; } } $obj = new User('zhang');
Product.php (include)
include __DIR__.'./User.php'; echo $obj->name; // 注意:include 引入的文件,一旦出错,脚本还会继续执行 echo "脚本继续运行"; // 脚本继续运行
Product.php 推荐(require)
// include __DIR__.'./User.php'; // 多次引入的话会报错,类不能重复定义 require __DIR__.'./User.php'; echo $obj->name; // 注意:require 引入的文件,一旦出错,就会终止脚本运行 echo "脚本继续运行"; // 不会被输出
include_once和require_once的主要区别就是,当重复引入一段代码时,他们只会引入一次,从而避免变量函数多次声明。
Product.php (include_once、require_once)
// 这里虽然多次引入,但不会报错,他们会判断是否重复引入 include_once __DIR__.'./User.php'; require_once __DIR__.'./User.php'; echo $obj->name;
实际练习:
config.php 数据库链接配置文件
<?php return [ 'type'=>'mysql', 'host'=>'localhost', 'dbname'=>'sys', 'username'=>'root', 'password'=>'root' ] ?>
connect.php
$config = require './config.php'; echo "<pre>"; print_r($config); // 将键名当作变量名,值作为变量的值。 对每个键/值对都会在当前的符号表中建立变量 extract($config); // pdo $pdo = new PDO("$type:host=$host;dbname=$dbname;",$username,$password); echo $pdo?"数据库连接成功":"连接失败,请检查配置项……";
函数演示:
<?php // mt_rand ( int $min , int $max ) : int echo mt_rand(1,100); // date ( string $format , int $timestamp = ? ) : string $today = date("Y-m-d H:i:s"); echo $today; // 2021-04-28 10:36:28 //---------------------------------------- // next()一般和current()配套使用 $cities = ['安徽','上海',"武汉","北京","南京","合肥"]; echo current($cities); // 安徽 next($cities); echo current($cities); // 上海 next($cities); echo current($cities); // 武汉 next($cities); // 归位 reset($cities); echo current($cities); // 安徽 //---------------------------------------- // extract ( array &$array , int $flags = EXTR_OVERWRITE , string $prefix = "" ) : int // 函数会将键名当作变量名,值作为变量的值。 对每个键/值对都会在当前的符号表中建立变量 $arr = ['name'=>'zhang','gender'=>"男",'age'=>18]; print_r($arr); extract($arr); echo "姓名:{$name} 性别:{$gender} 年龄:{$age}"; // 姓名:zhang 性别:男 年龄:18 ?>
<?php $item = ""; $tr=""; for ($i=1; $i <= 3; $i++): $td=""; for ($j=1; $j <= 3; $j++): $r = mt_rand(0,255); $g = mt_rand(0,255); $b = mt_rand(0,255); $td .= <<< TD <td style="background-color:rgb({$r},{$g},{$g})"></td> TD; endfor; $tr .= <<< TR <tr> {$td} </tr> TR; endfor; echo <<< TABLE <table border="1" cellspacing="0" width="150" height="150"> {$tr} </table> TABLE; ?>
<?php if (!empty($_POST)) { $a = $_POST["a"]; $b = $_POST["b"]; $operator = $_POST["operator"]; $result = ""; empty($a)?exit():""; if ($operator == '+'): $result = $a + $b; elseif ($operator == '-'): $result = $a - $b; elseif ($operator == '*'): $result = $a * $b; elseif ($operator == '/'): $result = $a / $b; endif; } else { $a = ""; $b = ""; $operator = ""; $result = ""; } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>计算器</title> <style> .content{ width: 800px; margin: 20px auto; border: 1px solid black; padding: 30px; text-align: center; background-color: aliceblue; } .content input{ height: 25px; padding: 10px; font-size: 16px; } .content input[type="submit"]{ height: 49px; width: 49px; } .content select{ height: 49px; width: 49px; font-size: 18px; } </style> </head> <body> <div class="content"> <h1>简单的计算器</h1> <form action="calculator.php" method="POST"> <input type="text" name="a" value="<?= $a; ?>"/> <select name="operator"> <option value="+" <?= $operator== "+"?"selected":"" ?> >+</option> <option value="-" <?= $operator== "-"?"selected":"" ?> >-</option> <option value="*" <?= $operator == "*"?"selected":"" ?> >*</option> <option value="/" <?= $operator == "/"?"selected":"" ?> >/</option> </select> <input type="text" name="b" value="<?php echo $b; ?>"/> <input type="submit" value="="/> <input name="result" type="text" value="<?php echo $result; ?>"/> <p>计算结果:<?= !empty($a)?$a.$operator.$b."=".$result:"" ?></p> </form> </div> </body> </html>
结束!!!