学习PHP笔记1

学习PHP笔记(一)

PHP基础

PHP基本语法

标准风格


// 这里写PHP代码!
代码一;
代码二;	// 每一句的结尾记得加分号
?>

⭕注意:如果一个文件里面全部都是PHP代码,推荐省略结束语句?>

PHP的注释

  • 单行注释
// 注释内容
# 注释内容
  • 多行注释
/*
注释内容
*/

PHP的变量

PHP的变量不用声明就能够直接定义与使用


$txt="php 在这里";		// 如果是文本信息就使用双引号
$a=5;		// 其他的数字类型的直接声明就好了
$b=10.5;
$c=$a+$b;
?>

⭕变量声明与创建的注意事项

  • 变量必须以 $ 符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始,不能是数字
  • 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
  • 变量名不能包含空格
  • 变量名是区分大小写的($y 和 $Y 是两个不同的变量)
值传递

$num1=10;
$num2=$num1;
$num2=20;
echo $num1;
地址传递使用

&表示获取变量的地址


$num1=10;
$num2=&$num1;
$num2=20;
echo $num1;
销毁变量

只销毁变量名不销毁变量值,变量值由PHP垃圾回收机制销毁(没有变量引用的值就是)

unset(变量名)

PHP函数的写法



function ([可声明变量,这个可以为空])
{
	// 函数的内容
} 
[函数名]([可声明的变量值,这个可以为空]);

?>

PHP的输出函数

echo函数和print函数,它们是作用基本上相同,用法也都差不多,只能输出数值跟字符串

echo函数

echo "

我这里可以放HTML句子

"
; echo "By ERHE.GROUP
"
; echo "HTML中的转义符正常用
"
; echo "我是", "一句", "话", ",", "但是", "被分开了。"; $a1=520; $txt1="erhe.group"; echo "我喜欢的数字是 $a1"; echo "
"
; echo "我的网页是:$txt1"; echo "
"
; echo ("要不要一起开发: $txt1"); // 加括号与不加是一个效果的 ?>
print函数

print "

我这里可以放HTML句子

"
; print "By ERHE.GROUP
"
; print "HTML中的转义符正常用
"
; // print "我是", "一句", "话", ",", "但是", "被分开了。";(错误写法) // print 不能输出多个文本的组合 $a1=520; $txt1="erhe.group"; print "我喜欢的数字是 $a1"; print "
"
; print "我的网页是:$txt1"; print "
"
; print ("要不要一起开发: $txt1"); // 加括号与不加是一个效果的 ?>

⭕注意:print 不能输出多个文本的组合,echo可以

print:输出成功后成功返回1

print_r():输出数组

var_dump():输出数据的详细信息,并且带有数据类型和长度

PHP EOF定义字符串

PHP EOF的基本格式


echo <<<EOF
        

标题

段落

EOF;
// ↑结束需要独立一行且前后不能空格,记得带上;要不编译不会通过 ?>
  • 必须后接分号,否则编译通不过。
  • EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
  • 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
  • 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
  • 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与a和aa的用法。

❇️PHP常量

PHP定义常量

常量就是在整个运行过程中,固定不变的值,常量不带$,推荐一般情况下常量名为大写
定义方法

define('变量名''值'[变量名大小写区分可指定truefalse(默认)])

正常情况下不能用特殊字符做变量名,但是可使用constant来获取特殊字符定义的值


define('*.*','erhe');
echo '这个网站是',constant('*.*');

也可以使用const来定义常量


const WEB='Erhe Web';
echo WEB;

常量一旦被定义,不能再被重新定义
判断常量是否定义,通过defined()判断常量是否已经定义


define('WEB','erhe');
if(!defined('WEB')){
    define('WEB','erhe by wss');
}
echo WEB;
PHP预定义常量
PHP_EOL    // 换行符
PHP_VERSION;	// PHP版本
PHP_OS;		// PHP运行的系统环境
PHP_INT_MAX;	// PHP中整型的最大值
// · · · · · ·还在持续更新中
PHP预定义魔术常量

魔术常量的值,随着它们在代码中的位置改变而改变

__LINE__;	// 获取当前行号
__FILE__;	// 文件的完整目录和文件名
__DIR__;	// 文件所在的目录

PHP的数据类型

数据类型有两种:强类型和弱类型

PHP是弱类型数据,但是在PHP7.0以后就支持强类型数据

基本类型(标量类型)

整型
  • 整数必须至少有一个数字 (0-9)
  • 整数不能包含逗号或空格
  • 整数是没有小数点的
  • 整数可以是正数或负数
  • 整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)
  • 最大的整数不超过(32位为例):-2的31次方到2的31次方-1,如果超过了这个范围就自动转变成浮点数
 
$x = 5201314;
var_dump($x);
echo "
"
; $x = -119; // 负数 var_dump($x); $a1 = 10; // 十进制 $a2 = 010; // 八进制 $a3 = 0x10; // 十六进制 echo $a1,'
'
; echo $a2,'
'
; echo $a3,'
'
;

PS:var_dump函数返回变量的数据类型和值

进制转换
进制 缩写 单词
十进制 dec decimalist
二进制 bin binary
八进制 oct octonary
十六进制 hex hexdecimalist

PHP进制转换机制


echo decbin(123),'
'
; // 十进制转二进制 echo bindec(1111011),'
'
; // 二进制转十进制 echo dechex(123),'
'
; // 十进制转十六进制 echo hexdec('7b'),'
'
; // 十六进制转十进制 echo decoct(123); // 十进制转八进制
浮点型
  • 浮点数是带小数部分的数字,或是指数形式
  • 浮点数在内存中保存的是近似值,不能直接参与数据大小的比较
 
$x = 3.14;
var_dump($x);

若要比较浮点数,必须要确定比较的位数


var_dump(bccomp(3.14,3.141,[这里指定比较的小数点后面的位数]));

结果的判定:如果两个数相等返回0,左边的数left_operand比较右边的数right_operand大返回1,否则返回-1

布尔型

布尔型只有TRUE和FALSE,它的结果不能使用echoprint进行输出,要用var_dump()来进行输出。

字符串

可以将任何文本放在单引号和双引号中

 
$a = "Welcome ERHE!";
echo $a;
echo "
"
; $c = 'blog'; echo $c; var_dump($c); ?>
单双引号的区别

单引号是真正的字符串,双引号要解析字符串当中的变量


$Web='erhe';
echo '我的网站是$Web','
'
; echo "我的网站是$Web",'
'
;

⭕注意:变量名跟其他字符串用{}分开,{}表示获取变量的值


$Web='erhe';
echo "{$Web}是我的网站",'
'
; echo "${Web}是我的网站",'
'
; echo "$Web是我的网站",'
'
; // 错误的写法
转义字符

echo '我说:\'大家好!\'','
'
; echo '文件保存在c:\\';
字符串定界符

$test1='定界符,heredoc形式,类似于(双引号)';
echo <<<suibian
$test1 
这个网站是
Erhe的
一个博客网站

suibian;
$test2='定界符,nowdoc形式,类似于(单引号)'; echo <<<'suibian' $test2
这个网站是
Erhe的
一个博客网站

suibian;
?>

<<<后面跟上标识符,要首位呼应,标识符命名规则跟变量的命名规则一样,最后结尾的时候要顶格写。

数组

数组也是变量,一个变量可以保存多个同类型的数据,只是在内存中这个变量具有连续的空间

索引数组

用整数做下标,默认从0开始(可指定),后面依次加一

 
print '索引数组
'
; $cars=array("Welcome","By","Erhe","Blog"); // 下标 0 1 2 3 print_r($cars); // 输出数组 echo '

'
; var_dump($cars); // 带是上数据长度输出数组 echo '

'
; echo $cars[0],'
'
; // 输出数组上面的数据 echo $cars[2],'
'
; // 输出数组上面的数据 ?>
关联数组

用字符串做下标,通过=>符号将下标和值关联起来

 
print '关联数组
'
; $empc=array('name'=>'Welcome','sex'=>'Erhe','orc'=>'Blog'); echo $empc['name'],'
'
; echo $empc['sex'],'
'
; print_r($empc); echo '

'
; var_dump($empc); ?>
数组的下标

print '被指定的索引数组
'
; $shutd=array(1=>"Welcome","By","Erhe","Blog"); print_r($shutd); echo '

'
; $shutdo=array("Welcome",3=>"By","Erhe",10=>"Blog",'group'); print_r($shutdo); echo '

'
; $shutdow=array("Welcome",5=>"By",'name'=>"Erhe","Blog"); print_r($shutdow); echo '

'
; $shutdown=array(1=>"Welcome",1=>"By",1=>"Erhe","Blog"); print_r($shutdown); ?>

数组的下标只能是正整数和字符串

 
$a1[true]='aa';     // 转成1
print_r($a1);
echo '

'
; $b1[false]='bb'; // 转成0 print_r($b1); echo '

'
; $c1[12.9]='cc'; // 转成12(取整数部分) print_r($c1); echo '

'
; $d1[-10]='dd'; // 负数可以做下标 print_r($d1); echo '

'
; $e1[-12.3]='ee'; // 取负整数 print_r($e1); echo '

'
; $f1['10']='ff'; // 字符串数字转成数字 print_r($f1); echo '

'
; $g1[]='gg'; // 空字符串也可以做下标 print_r($g1); echo '

'
; $h1[null]='hh'; // 转成空字符串做下标 print_r($h1); ?>
短数组语法

可以直接使用中括号来声明属组

 
print '索引数组
'
; $cars=array("Welcome","By","Erhe","Blog"); print_r($cars); ?>

数组的赋值

⭕注意:这个是适用于PHP7.1以上的版本

 
$num1=10;
$num2=20;
[$num1,$num2]=[$num2,$num1];
echo $num1,'

'
,$num2; ?>

二维数组的声明

 
$erhetwo=[
    ["Welcome","By","Erhe","Blog"],
    ['name'=>'Welcome','sex'=>'Erhe','orc'=>'Blog']
];
print_r($erhetwo);
echo '

'
; echo'
';	// 原样显示
print_r($erhetwo);
?>

字符串与数组

⭕注意:这个是适用于PHP7.1以上的版本

 
echo 'erheblog'[0],'
'
; echo 'erheblog'[-1],'
'
; // 从右边开始取第一个 ?>

数据类型转换

自动类型的转换

当提供的类型和需要的类型不一致的时候会自动进行类型转换

 
$num=10;
if($num){       // 自动将数字转成布尔型
    echo 'aa';
}else{
    echo 'bb';
}
echo '

'
; echo '20'-10; // 自动的将字符串转成数字 ?>
强制类型转换

语法:(数据类型)数据

 
$num=12;
var_dump($num,(int)$num,(float)$num);
?>
其他类型与布尔之间的转换

规则:0、空为假,非0、非空为真

  • 数字转换规律:0为false,非0为true
  • 字符串数组转换规则:0和空是false,其他是true
 
var_dump((bool)'abc');      // bool(true)
echo '

'
; var_dump((bool)''); // bool(false) echo '

'
; var_dump((bool)'0'); // bool(false) echo '

'
; var_dump((bool)'0.0'); // bool(true) echo '

'
; var_dump((bool)'00'); // bool(true) echo '

'
; var_dump((bool)'false'); // bool(true) echo '

'
; var_dump((bool)'null'); // bool(true) echo '

'
; var_dump((bool)1); // bool(true) echo '

'
; var_dump((bool)0); // bool(false) echo '

'
; var_dump((bool)-10); // bool(true) echo '

'
; var_dump((bool)0.0); // bool(false) echo '

'
; var_dump((bool)array()); // bool(false) echo '

'
; var_dump((bool)array(1)); // bool(true) echo '

'
; var_dump((bool)array(false)); // bool(true) echo '

'
; var_dump((bool)null); // bool(false) echo '

'
; ?>

#️⃣PHP的运算符

算术运算符

一元运算符 二元运算符
++ +
-
*
% (取余)

⭕注意:在PHP中。算术运算符只能做数学运算。

 
echo '10'+'20','

'
; // 自动进行数据转换 echo '10ab'+'20cd','

'
; // 省略字符 echo 'ab10'+'cd20','

'
; // 读取字符串的首字符 ?>

++后置:先运算再自增

 
$suma=10;
echo $suma++;      // 10
?>

++前置:先自增再运算

 
$suma=10;
echo ++$suma;      // 11
?>

关系(比较)运算符

>
>=
<
<=
==		// 等于运算,但是不比较值的类型
!=
===		// 完全等于运算,不仅比较值,而且还比较值的类型,只有两者一致才为真
!==
.		// 连接字符串

逻辑运算符

用来连接两个比较运算符

&	// 与:运算符两边的表达式都要计算
|	// 或:运算符两边的表达式都要计算
// 短路就是如果前面的条件不满足,后面的条件就不用计算了
&&	// 短路与
||	// 短路或// 非
 
$a=5;
if($a>10 && ++$a>20)
    echo 'erhe.group';
echo $a;
?>
// 分析:$a>10为false,与中只要有一个是false,另一个不用计算结果肯定是false,所以短路与++a就不计算了,结果是5。
 
$a=5;
if($a<10 || ++$a>20)
    echo 'erhe.group';
echo $a;
?>
// 分析:短路或只要有一个为true,结果肯定是true,$a<10结果是true,后面++$a就不用计算了,结果是5。

赋值运算符

=
+=
-=
*=
/=
%=

字符串连接符

 
echo 'aa'.'bb';
echo 'aa','bb';
?>

错误抑制符

错误抑制符只对表达式有效

 
echo $erhe+$group;
echo '
'
,'
'
; echo @($erhe+$group); // 错误抑制符 ?>

三元运算符

语法:表达式?值1:值2
表达式的值为true,或者是1返回值1,否则返回值2

 
$erhe=10;
echo $erhe%2?'奇数':'偶数';
?>

null合并运算符

⭕注意:这个是适用于PHP7.0以上的版本

 
$data1=321;
echo $data1??'数据未知!';
echo '
'
,'
'
; echo $data2??'数据未知!'; ?>

判断变量是否为设置函数

isset();	// 判断变量是否被设置,并且设置的不是null
empty();	// 判断一个变量是否为空

PS:变量是否无为空的定义,就是变量的值在转成布尔型的值时候,显示的结果为false的全部为空。

✅PHP的判断

语法

单分支
if(条件){
    // 代码块
}
双分支
if(条件){
    // 代码块
}else{
    // 代码块
}
多分支
if(条件1){
    // 代码块
}elseif(条件2){
    // 代码块
}else {
    // 代码块
}
多路选择
case 常量:
    // 代码块
    break;
case 常量:
    // 代码块
    break;
default:
    // 代码块

应用实例

判断是否为闰年(练习单分支)

步骤:

  • 创建表单
  • 提交数据
  • 在服务器获取提交的数据并判断

代码实现




    
    
    
    判断是否为闰年




    请输入年份: 

小结:

  • $_POST是一个变量,用来保存post提交的数据
  • action=""表示将数据提交到本页面
  • is_numeric()用来判断变量是否是数字或字符串数字
  • is_int()判断变量是否是整形
  • if else后面如果只有一句代码,大括号可以省略
判断成绩(练习多分支)

目标:输入语文和数学判断等级

代码实现:




    
    
    
    判断成绩


100){
        echo '语文成绩必须在0-100之间';
    }
    elseif($math='' || !is_numeric($math) || !($math>=0 && $math<=100)){
        echo '数学成绩必须在0-100之间';
    }else {
        $avg=($ch+$math)/2;
        echo "您的平均分是:{$avg}
"; if($avg>=90) echo 'A'; elseif($avg>80) echo 'B'; elseif($avg>=70) echo 'C'; elseif($avg>=60) echo 'D'; else echo 'E'; } } ?> 语文:
数学:
更改颜色(练习swich-case)

目标:选择颜色,将文字的颜色改成选择的颜色

代码实现:




    
    
    
    更改颜色



   window.οnlοad=function(){
       document.getElementById('shi').style.color='$color';
    }
    
str;
}
?>
锄禾日当午,
汗滴禾下土。
谁知盘中餐,
粒粒皆辛苦。
计算器

目标:实现一个网页计算器

代码实现:




    
    
    
    计算器




    
    
    
    
    



♻️PHP循环

基本循环语句

for循环

基本语法

for(初始值;条件;增量){
    // 代码块
}

⭕注意:循环中千万不能出现死循环

死循环案例1


for($i=1;$i<10;$i--){	// $i永远小于10
    echo "{$i}:开始了死循环喂!

"
; } ?>

死循环案例2


for($i=1;$i<10;){	// $i永远等于1,并且小于10
    echo "{$i}:开始了死循环喂!

"
; } ?>

死循环案例3


for($i=1;;$i++){	// 只要没有条件就是死循环
    echo "{$i}:开始了死循环喂!

"
; } ?>

死循环案例4


for(;;){	// 最经典的死循环
    echo "{$i}:开始了死循环喂!

"
; } ?>

循环理论:

在循环N次的循环体中,初始值执行了1次,条件执行了N+1次,增量执行了N次。在循环执行完毕后,变量的值($i)是存在的。

while循环

基本语法

while(条件){
    // 代码块
}
do-while循环

基本语法

do{
    // 代码块
}while(条件)

PS:

  • for、while、do-while可相互替换
  • 如果明确知道循环多少次首选for
  • 如果要循环到条件不成立为止选while或者是do-while
  • 先判断再执行选while,先执行再判断选do-while
  • while循条件不成立就不执行,do-while循环条件不成立至少执行一次
foreach循环

foreach循环是用来遍历数组,相似于for-in循环。

基本语法一

foreach(数组 as){
    // 代码块
}

基本语法二

foreach(数组 as=>){
    // 代码块
}
switch循环

基本语法

switch(变量){
    // 验证条件
    case [条件]:
        // 条件执行体
        break;
    case [条件]:
        // 条件执行体
        break;
    default:
        // 条件执行体
}

PS:虽然只执行一次,但它也属于一种循环

基本循环实战

实现功能:实现从1加到100

for循环

$sum=0;
for($i=1;$i<=100;$i++){
    $sum+=$i;
}
echo $sum;
?>
while循环

方法一


$i=1;
$sum=0;
while($i<=100){
    $sum+=$i;
    $i++;
}
echo $sum;
?>

方法二


$i=1;
$sum=0;
while($i<=100){
    $sum+=$i++;
}
echo $sum;
?>
do-while循环

方法一


$i=1;
$sum=0;
do{
    $sum+=$i;
    $i++;
}while($i<=100);
echo $sum;
?>

方法二


$i=1;
$sum=0;
do{
    $sum+=$i++;
}while($i<=100);
echo $sum;
?>

方法三


$i=1;
$sum=0;
do{
    $sum+=$i;
}while(++$i<=100);
echo $sum;
?>

PS:结合++前置和++后置考虑逻辑

foreach循环

方式一


$stu=["Welcome","By","Erhe","Blog"];
foreach($stu as $v){
    echo $v,"

"
; } ?>

方式二


$stu=["Welcome","By","Erhe","Blog"];
foreach($stu as $k=>$v){
    echo "{$k}:{$v}","

"
; } ?>

多语句表达式

目的:初始值、增量可以由多条语句组成

实现功能:数字分解


for($i=1,$j=9;$i<=$j;$i++,$j--){
    echo "10可以分成{$i}{$j}
"
; } ?>

PS:初始值、增量可以写多个表达式,但是条件一般只写一个,如果条件写多个,只是最后一个条件起作用

双重循环

实现功能:打印阶梯数字


for($i=1;$i<=9;$i++){	// 循环行
    for($j=1;$j<=$i;$j++){	// 循环列
        echo $j,' ';
    }
    echo '
'
; } ?>

实现功能:打印九九乘法表


for($i=1;$i<=9;$i++){
    for($j=1;$j<=$i;$j++){
        echo $i,'*',$j,'=',$i*$j,' ';
    }
    echo '
'
; } ?>

变好看后



';
    for($j=1;$j<=$i;$j++){
        echo "';
    }
    echo '';
}
?>
{$i}*{$j}=",($i*$j),'

PHP跳转语句

break

中断循环


for($i=1;$i<10;$i++){
    echo "{$i}:Welcome","Erhe","Blog!

"
; if($i==5) break; } ?> // 输出5句

for($i=1;$i<10;$i++){
    if($i==5)
    break;
    echo "{$i}:Welcome","Erhe","Blog!

"
; } ?> // 输出4句

中断多重循环


for($i=1;$i<=9;$i++){
    for($j=1;$j<=$i;$j++){
        echo $j,' ';
        if($j==5){
            break 2;	// 跳出几个循环就写及
        }
    }
    echo '
'
; } ?>

continue

中断当前循环,进入下一个循环


for($i=1;$i<10;$i++){
    if($i==5)
    continue;
    echo "{$i}:Welcome","Erhe","Blog!

"
; } ?> // 没有第5句的结果输出

PS:break和continue默认中断、跳出1重循环,如果调中断、跳出多重循环,在后面加一个数字。

PHP代替语法

PHP中,除了do-while以外,其他的语法结构都有替代语法
规则:左大括号变冒号,又大括号变endxxx

基本代替语法

if的代替语法
if():
elseif():
else:
    // 代码块
endif;
switch的代替语法
switch():
    // 代码块
endswitch;
for的代替语法
for():
    // 代码块
endfor;
while的代替语法
while():
    // 代码块
endwhile;
foreach的代替语法
foreach():
    // 代码块
endforeach;

应用实例

应用到混编上面

未使用代替语法




    
    
    
    混编



    :WelcomeErheBlog!

使用代替语法




    
    
    
    混编



    :WelcomeErheBlog!

PHP函数

函数就是一段代码块
函数可以实现模块化编程

函数的定义

定义函数的基本语法

function 函数名(参数1,参数2,.....){
    // 函数体
}

函数的调用

函数名();

PS:函数名不区分大小写。

可变函数

将函数名存储到变量中


function erhe($path){
    echo $path,'
'
; } $nvme='erhe'; $nvme('welcome'); ?>

匿名函数


$erhe=function(){	// 定义匿名函数
    echo 'welcome erhe.group';
};
$erhe();	// 调用函数
?>

参数传递

函数的参数有形式参数和实际参数
形式参数是定义函数时候的参数,只起形式的作用,没有具体的值
实际参数的调用函数时候的参数,有具体的值


function erhe($num1,$num2){
    echo $num1+$num2;
}
erhe(12,23);
?>

默认情况下,参数的传递是值传递


$num=10;
function erhe($augrp){
    $augrp=50;
}
erhe($num);
echo $num;
?>

地址传递,加上$


$num=10;
function erhe(&$augrp){
    $augrp=50;
}
erhe($num);
echo $num;
?>

PS:如果是地址传递,不能直接写值

参数的默认值

在函数定义的时候给形参赋值就是参数的默认值。(默认值必须是值,不能用变量代替)


function erhe($name,$port='地址不详'){
    echo '姓名:'.$name,'
'
; echo '地址:'.$port,'
'
; } erhe('阿里云','北京'); erhe('华为云'); ?>

默认值可以使用常量


define('ACE','地址不详');	// 设置常量
function erhe($name,$port=ACE){		// 注意形参的顺序
    echo '姓名:'.$name,'
'
; echo '地址:'.$port,'
'
; } erhe('阿里云','河南'); erhe('华为云'); ?>

PS:没有默认值的形参写前面,有默认值的形参写后面。

参数个数不匹配盘


function erhe($num1,$num2){
    echo $num1,'
'
; echo $num2,'
'
; } // erhe(10); // 实参少于形参(报错) erhe(10,20,30); // 实参多于形参,只取前面对应的值 ?>

获取所传递的参数


function erhe(){
//    echo func_num_args(),'
'; // 获取参数的个数
$num=func_get_args(); // 获取参数的数组 print_r($num); echo '
'
; } erhe(10); erhe(10,20); erhe(10,20,30); ?>

参数约束

定义变长参数

...相当于func_get_args()上面的函数


function erhe($name,$age,...$aihao){
    echo '姓名:'.$name,'
'
; echo '年龄:'.$age,'
'
; print_r($aihao); echo '
'
; } erhe('tom',21); erhe('李华',25,'吃饭','睡觉'); ?>

⭕注意:如果数组调用此函数要将数组里面的参数展开


function erhe(...$args){
    print_r($args);
    echo '
'
; } $numg=[10,20,30]; echo '
';
erhe(...$numg);		// 将数组中的参数展开
?>
参数类型约束

⭕注意:这个是适用于PHP7.0以上的版本


function erhe(string $name,int $age){   // 指定数据类型,变成强类型数据
    echo "姓名:{$name}
"
; echo "年龄:{$age}
"
; } // erhe('tome','aug'); // 已经报错了 erhe('tome',32); ?>
返回值类型约束

function erhe(int $num):int{   // 指定返回值的数据类型
//    return "aaa";     // 不是指定的返回值数据就报错
    return $num;
}
erhe(32);
?>

PS:可约束的数据类型有这些:string、int、float、bool、数组

约束返回类型是数组

function erhe():array{ 
}

约束return后面不能有返回值

⭕注意:这个是适用于PHP7.1以上的版本

function erhe():void {	// void是空的意思
    return;
}
erhe();

⛔return

终止脚本执行


echo '锄禾日当午
'
; return; echo '汗滴禾下土'; ?>

⭕注意:return只能中断当前php文件,如果有包含文件,就只能中断有return的那个php文件。

如果想全部终止使用

exit();
// 或者
die();

返回页面结果

index.php(主页文件)


$stu=require './test.php';
print_r($stu);
?>

test.php(包含文件)


return array('name'=>'tom','sex'=>'男');
?>

PS:在项目中引入配置文件就使用这种方法

函数的返回和终止

函数的终止


function erhe(){
    echo 'aaa';
    return;
    echo 'bbb';
}
erhe();
?>

函数的返回


function erhe(){
    return 10;
}
echo erhe();
?>

练习测试

通过for循环将数组中值求和、求平均值

代码实现


$num=[1,24,534,65,2,54,657,2,64,35,54,767,86,344];
$he=0;
// for($i=0;$i
for($i=0,$n=count($num);$i<$n;$i++){
    $he+=$num[$i];
}
echo '和是:'.$he,'
'
; echo '平均值:'.$he/count($num),'
'
; echo '平均值,精确到小数点后两位:'.number_format($he/count($num),2); ?>

数组翻转


$stu=["Welcome","By","Erhe","Blog"];
for($i=0,$j=count($stu)-1;$i<$j;$i++,$j--){
    [$stu[$i],$stu[$j]]=[$stu[$j],$stu[$i]];	// 元素交换
}
print_r($stu);
?>

遍历二维数组


$stu=[
    [1,3,5,2,3,4,5],
    [12,32,435,3,2321,121,2,32,12]
];
for($i=0;$i<count($stu);$i++){     // 循环第一列
    for($j=0;$j<count($stu[$i]);$j++){  // 循环第二列
        echo $stu[$i][$j],' ';
    }
    echo '
'
; } ?>

数据分拣


for($i=1;$i<=100;$i++){
    if($i%15==0)
        echo 'C';
    elseif ($i%3==0) 
        echo 'A';
    elseif ($i%5==0) 
        echo 'B';
    else
        echo $i;
    echo ' ';
}
?>

打印水仙花数


for($i=100;$i<=999;$i++){
    $a=(int)($i/100);
    $b=(int)(($i%100)/10);
    $c=(int)($i%10);
    if($i==pow($a,3)+pow($b,3)+pow($c,3))
    echo $i,'
'
; } ?>

斐波那契数列


$num1=1;    //  第一个数
$num2=1;    //  第二个数
echo $num1,' ',$num2,' ';
while(true){
    $num3=$num1+$num2;  //  第三个数是前面两个数的和
    if($num3>100)   // 超过100终止循环
    break;
    echo $num3,' ';
    $num1=$num2;    // 将$num1转给$num2
    $num2=$num3;    // 将$num2转给$num3
}
?>

PHP作用域

声明的局部与全局

局部的变量声明


$x=10020; // 全局变量

function myTest()
{
    $y=10; // 局部变量
    echo "

测试函数内变量:

"; echo "变量 x 为: $x"; echo "变量 y 为: $y"; } myTest(); echo "

测试函数外变量:

"; echo "变量 x 为: $x"; echo "变量 y 为: $y"; // 这个是没有输出的 ?>

变量作用域

全局变量:在函数外面
局部变量:在函数里面,默认情况下,函数内部是不会访问函数外部的变量
超全局变量:可以在函数内部和函数外部访问,形式:$_XXXXXX
常量没有作用域的概念,在哪里都适应。

报错写法:函数内部是不会访问函数外部的变量


$num=10;
function erhe(){
    echo $num;
}
erhe();
?>

将值赋给全局变量


$_POST['num']=10;
function erhe(){
    echo $_POST['num'];
}
erhe();
?>

函数内定义全局变量


function erhe(){
    $_POST['num']=10;
    echo $_POST['num'];
}
erhe();
echo $_POST['num'];
?>
global 关键字

global 关键字用于函数内来读取并会更新数外的全局变量


$x=8;
$y=6;
function erhe(){
    global $x,$y;	// 将函数外部的变量,引用到函数内部
    $y=$x+$y;
}
erhe();
echo $y; // 输出 14
?>

函数内部访问全局变量:使用$GLOBALS[]函数


$x=8;
$y=6;
function erhe(){
    $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];  // 访问全局变量
} 
erhe();
echo $y;	// 输出 14
?>

PS:只要你声明了全局变量,它就会自动保存到$GLOBALS[]函数里面。

Static 关键字

function erhe(){
    static $x=0;
    echo $x;
    $x++;
    echo PHP_EOL;    // 换行符
}
erhe();		// 调用第一次
erhe();		// 调用第二次
erhe();		// 调用第三次
// PHP常量的每次调用的值都会被存储,下次调用时,用的是上次调用后的结果。
?>

静态变量

静态变量一般指的是静态局部变量


function erhe(){
    $num=10;
    $num++;
    echo $num,'
'
; } erhe(); // 调用第一次 erhe(); // 调用第二次 erhe(); // 调用第三次 // PHP静态局部变量的每次调用的值都不会被存储,下次调用时,用的是新的变量,上次的值会被销毁。 ?>

常量和静态变量的区别
1、常量和静态变量都是初始化一次
2、常量不能改变值,静态变量可以改变值
3、常量没有作用域,静态变量有作用域

匿名函数use()

默认情况下,函数内部不能访问函数外部的变量,但在匿名函数中,可以通过use将外部变量引入匿名函数中


$num=10;
$erhe=function() use($num) {
    echo $num;
};
$erhe();
?>

PS:只能引入一层,嵌套使用use()函数则不能引入成功

递归

函数内部自己调用自己

打印10~1


function erhe($num){
    echo $num,' ';
    if($num==1) // 递归出口
        return;
    erhe($num-1);   // 递归点
}
erhe(10);
?>

从1加到100


function erhe($num){
    if($num==1) // 递归出口
        return 1;
    return $num+erhe($num-1);   // 递归点
}
echo erhe(100);
?>

斐波那契数列

打印第五个斐波那契数


function erhe($n){
    if($n==1 || $n==2) // 递归出口
        return 1;
    return erhe($n-1)+erhe($n-2);   // 递归点
}
echo erhe(5);
?>

打印前10个斐波那契数列


function erhe($n){
    if($n==1 || $n==2) // 递归出口
        return 1;
    return erhe($n-1)+erhe($n-2);   // 递归点
}
for($i=1;$i<=10;$i++)
echo erhe($i),' ';
?>

特别声明

原文地址:https://blog.kbai.cc/%E5%85%A5%E5%9D%91PHP1/

此文章全部都是依靠自己的学习理解来写的原创文章,难免可能会出现有错误的地方,

如果大家以后阅读的时候发现有问题,那就麻烦到下方评论区来进行错误指出,使错误尽快做出改正,

在此,感谢大家的阅读与支持!

支持一下

觉得我写的好的话可以支持一下我哦~持续关注我,会更新其他好玩且实用的项目。

如果我能帮助到你,那就请我喝杯呗~

我的博客链接:blog.kbai.cc

你可能感兴趣的:(Web,PHP,php,开发语言,后端,sql,服务器)