PHP基础语法

一、变量

1.1 变量名称

PHP中的变量是由一个“$”后面跟变量名来表示,变量名是区分大小写的。

一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母、数字,或者下划线。

1.2 给变量赋值

1.3 引用赋值

将“&”符号加到将要赋值变量前

1.4 变量的数据类型

$a=1 //$a是整形
$a=1.1   //$a是浮点型
$a="a"   //$a现在是字符串型,PHP解析器会自动决定变量的类型

1.5 可变变量

<?php
$a='hello';
$$a='world';
echo $a;  //输出hello
echo $$a;  //输出world
echo $hello;   //输出world
?>

 

二、常量

2.1 声明常量

可以用define()声明常量

define('NAME','php');     //常量名是一个大写的字符串
echo NAME;    //输出php

也可以用const关键字定义常量

const NAME='php';
echo NAME;   //输出php

2.2 常量与变量的不同

#常量前没有“💲”符号;

#常量只能用define()函数和const关键字定义,不能通过赋值语句;

#常量一经定义就不能被重新定义或者取消定义

#常量的值只能是标量

2.3 用defined()函数检测常量是否存在

2.4 内置常量

PHP解析器在解析PHP代码之前就会定义一些常量,这些意境定义好的常量叫内置常量,可以随时使用;

(1)-DIR-:指向当前执行的php程序文件所在的目录

(2)-FILE-:当前执行php程序文件名

(3)-LINE-:当前php代码的行数

(4)PHP_VERSION:php版本号

(5)PHP-OS:操作系统名称

 

三、数据类型(gettype()函数获取变量的类型)

3.1 PHP支持8种原始数据类型

(1)四种标量类型:boolean(布尔型)、integer(整型)、float(浮点型)、string(字符串)

(2)两种复合类型

(3)两种特殊类型

  3.1.4 字符串

  单引号:‘a’

  双引号:“a”

  注意:双引号与单引号的区别如下

 1.双引号解析变量,但是单引号不解析变量。

 2.在双引号里面插入变量,变量后面如果有英文或中文字符,它会把这个字符和变量拼接起来,视为一整个变量。一定要在变量后面接上特殊字符,例如空格等分开。

 3.如果在双引号里面插变量的时候,后面不想有空格,可以拿大括号将变量包起来。

 4.双引号解析转义字符,单引号不解析转义字符。但,单引号能解析\' 和\

 5.单引号效率高于双引号,尽可能使用单引号

 6.双号和单引号可以互插!!!双引号当中插入单引号,单引号当中插入变量,这个变量会被解析。

 7.神奇的字符串拼接胶水——(.)点,用来拼接字符串。

 8.我们将定界符声明字符串视为双引号一样的功能来看待。

 

  heredoc语法结构:(会对变量解析并对特殊字符转义)

  <<<ETO

  多行字符串

  ETO

  newdoc语法结构:

  <<<'ETO'

  多行字符串

  ETO

  字符串可以用“.”运算符连接起来

  3.1.5 数组

  可以用array()函数新建一个数组,数组单元可以通过array[key]或array{key}来访问,用print_r()和var_dump()输出数组。

  3.1.6 NUll类型

  注意:知道null产生的三种情况,学习empty 和 isset两个函数的区别。

  empty()可以向括号中间传入一个变量。这个变量的值如果为false或者为null的话,返回true。

       isset()可以向括号中间传入一个或者多个变量,变量与变量间用逗号分开。只要有一个变量为null,则返回false。否则,则返回true。

       主要有以下三空情况会产生空(null)类型:

  •       通过变量赋值明确指定为变量的值为NULL
  •       一个变量没有给任何值
  •       使用函数unset()将变量销毁掉

 3.2 PHP数据类型之自动转换和强制转换

PHP在PHP 5.x阶段都是完全的弱类型的编程语言。所谓弱类型,就是在声明变量的时候,不需要指定变量的类型。我要声明一个整型的变量,我不用在前面非得写上类型,再写变量。

PHP 7 的性能有很大的提高。实际测试的结果,PHP 7的性能与PHP5.6相比,提升了性能接近200%。在PHP 7 中有些地方,我们可以强制指定类型,也可以不用强制指定类型来声明变量。

我们接下来讲强制类型转换和自动类型转换两个部份。

布尔值的自动类型转换

自动类型转换,就是数据类型在某种情况下,自动会变为其他的类型参与运算。

自动类型转换的发生时机是:运算和判断的时候某些值会自动进行转换。

下面的情况是布尔值判断时的自动类型转换:

  • 整型的0为假,其他整型值全为真
  • 浮点的0.0,布尔值的假。小数点后只要有一个非零的数值即为真。
  • 空字符串为假,只要里面有一个空格都算真。
  • 字符串的0,也将其看作是假。其他的都为真
  • 空数组也将其视为假,只要里面有一个值,就为真。
  • 空也为假
  • 未声明成功的资源也为假

强制类型转换

强制类型转换有三种方式:

  • 用后面的三个函数可以完成类型转换,intval()、floatval()、strval()
  • 变量前加上()里面写上类型,将它转换后赋值给其他变量
  • <?php
       //定义一个变量,我们来变化一下试试
       $transfer = 12.8;
       //把浮点变为整型
        $jieguo = (int)$transfer;
        var_dump($jieguo);
       //把浮点变为布尔
       $jieguo = (bool) $transfer;
       var_dump($jieguo);
       //把布尔变整型
       $bool = true;
       $jieguo = (int)$bool;
       var_dump($jieguo);
        //把浮点变数组
       $fo = 250;
       $jieguo = (array)$fo;
       var_dump($jieguo);
       //其他的操作方式,按照文字总结的规律你来试试
    ?>
    //输出int(12) bool(true) int(1) array(1) { [0]=> int(250) }

     

  • settype(变量,类型)直接改变量本身
  • <?php
        //定义浮点变为整型
        $fo = 250.18;
       //settype第二个参数是int,你实验的时候要记得第二个参数要为字符串类型
        settype($fo,'int');
        //输出看看结果
        var_dump($fo);
    ?>
    //输出int(250)

试一试:

  • 空转为整型会为整型的0
  • 空转为浮点会为浮点的0
  • 空转为字符串会为空字符串‘’
  • 浮点的123.0转为字符串会为字符串123
  • 浮点的123.2转为字符串会为字符串的123.2
  • 浮点即使小数点再大,它都会被干掉,会舍掉小数点后面的值
  • 如果字符串转为整型的时候,如果数值在前面,会将前面的数值拿出来做为整型的转换值。
  • settype(变量,'null'); 等价于 unset()一个变量
  • $目标变量 = (类型)$操作变量 只会改变目标变量的类型,不会改变原变量的类型,Settype是改变原值

 

四、运算符

3.1 算数运算符:+、-、*、/、%、++、--

3.2 字符运算符“.”

3.3 赋值运算符:=、+=、-=、*=、/=、.=、%=

3.4 比较运算符:==、!=、<、>、<=、>=、===、!==

不过在在我们PHP里面多出了一种运算符:

说明符号
大于 >
小于 <
大于等于 >=
小于等于 <=
不等于  !=
等于 ==(赋值是=号,所以==规定为等于)
全等(判断类型等于) ===
全不等(判断类型不等于) !==

 

 

 

 

 

 

 

 

3.5 逻辑运算符:&&、AND、||、OR、!、NOR

  逻辑运算符比较简单,是我们人类进行逻辑思考时的一种方式。

举例说明详细说明
$x and $y 逻辑与(并且关系) $x 和$y 为真则返回真
$x && $y 同上 同上
$x or $y 逻辑或 $x,$y均为false时为假,其他情况全为真
$a||$b 同上 同上
!$x 逻辑非 取反,即true变为false,false变为true
$x xor $y 逻辑异或 相同取false,相异为true

 

 

 

 

 

 

【重点知识】短路

短路就是采用一个懒人模式来思考问题。

逻辑与的特性是:两边为true即为true,其他情况均为假。
逻辑或的特性是:两边为假均为假,其他情况全为真。

我们现在把自己想象成一个懒汉,非常非常懒。来思考逻辑与和逻辑或。可不可以这样理解:
逻辑与(&&):如果前面第一个条件为false了,后面就可以不用执行了,当使用‘&’时两边都会执行。

逻辑或(||):如果前面第一个条件为true了,后面就可以不用执行了,当使用“|”时两边都会执行。

 

3.6 三元运算符:“?:”

三元运算符和其它运算符

此外还有一些特殊的运算符和符号,我们再来进行讲解。可能以后我们需要用到。

符号说明
$x? 真代码段:假代码段 判断是否为真假 ? 真情况 : 假情况;
``(反引号) 反引号中间插代命令,执行系统命令,等价于shell_exec函数
@ 单行抑制错误,把这一行的错误不让它显示出来了,效率低不建议使用
=> 数组下标访问符
-> 对象访问符
instanceof 判断某个对象是否来自某个类,如果是的返回true,如果不是返回false

3.7 NULL合并运算符:$name=$_GET['name']??false;

3.8 太空舱操作符:用于比较两个表达式,当$a小于、等于或大于$b时分别返回-1、0或1

echo 1<=>1   //0
echo 1<=>2  //-1
echo 2<=>1   //1

 

五、流程控制

流程控制也叫控制结构,在一个程序中用来控制如果执行语句,它决定了某个语句、表达式是否会被执行或执行的次数;PHP的控制语句分为三类:顺序、条件和循环控制语句。

5.1 条件控制语句 if、else、elseif

<?php
if(判断语句1){
    执行语句体1
}elseif(判断语句2){
    执行语句体2
}else if(判断语句n){
        执行语句体n
}else{
        最后的else语句可选
}

//后续代码
?>

注:elseif()可以写成else if()。

5.2 条件控制语句switch、case、break、default

<?php

switch(变量){    //字符串,整型

       case 具体值:
               执行代码;
               break;

       case 具体值2:

               执行代码2;
               break;

       case 具体值3:

               执行代码3;
               break;
       default:
}
?>

 

5.3 while循环语句

<?php
//定义需要往返的次数,老外喜欢从0开始计数,我们也从0开始计
$count = 0;

//while后面接布尔值判断,为真执行,为假停止
//$count 小于100的时候执行,也就是$count为0至99的时候执行
//如果$count不小于100了,循环停止执行后续的代码

//循环开始处
while($count < 100){

 echo '我是王思总,我是第' . $count .'次出差<br />';
 //每次执行让$count+1,这样的话,就不会产生$count永远小于100的情况了
 $count++;

//循环结束
}
echo '后续代码';
?>

while是一个布尔型循环,while(布尔判断)的值为true就执行大括号括起来的代码。如果为假就停出去,执行后续代码。

<?php
$i=2;
echo '<table border="1">';
while ($i<10) {
    if($i%2==1){
    echo '<tr>';
    $i++;
}else{
    echo '<tr bgcolor="pink">';
    $i++;
}
echo '<td>1</td>
      <td>2</td>
      <td>3</td>
      <td>4</td>';
echo '</tr>';# code...
}
echo '</table>';
?>

运行结果:

注:不要写死循环(没有退出条件的循环)

5.4 do...while循环语句

 do...while与while的语法结构基本一样,也是一个布尔型循环,功能也基本一样。

do...while与while的区别是,它们的值的检查时机不同。

do-while 不论while判断是否成立,先执行一次代码代码块循环语句,保证会执行一次(表达式的真值在每次循环结束后检查)。
然而我们之前的while循环会检查布尔判断区域,成立则执行。不成立则不执行。

<?php
$e=2;
do{
    echo $e.'do<br/>';
    $e++;
} while($e<5);
echo $e.'<br/>';   //do..while执行完执行这一步
?>
//执行结果:
//2do
//3do
//4do
//5

 

5.5 for循环语句

for($i=1;$i<10;$i++){
    for($j=1;$j<=$i;$j++){
        echo $i.'*'.$j.'='.$i*$j.'&nbsp;&nbsp;';
    }
    echo '<br/>';
}
语句作用
exit exit之前我们讲过了,从当前处停止后续执行
break 之前遇到过,跳出循环或者跳出结构体执行后续代码
continue 跳出此次循环,下次循环继续

5.6 foreach循环语句:常用来遍历数组元素

5.7 PHP流程控制之goto语法

<?php
for($i=0; $i<100; $i++) {
    echo ''. $i .'周往返北京大连<br />';
    if($i == 17){
            goto end; 
     }
}

end:
echo '集团公司要求停止此项';
?>

注:
goto 操作符可以用来跳转到程序中的另一位置。
该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记。
PHP 中的 goto 有一定限制,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中。可以跳出循环或者 switch,通常的用法是用 goto 代替多层的 break。

六、函数(function)

函数分为自定义函数和系统函数

function 函数名([参数名1[=值1], 参数名2[=值2], 参数名n[=值n]])
{
       函数中的功能体
    [return 返回值]
}

上面的语法规定中有如下特点:

  • 函数以function开始
  • function后面接空格,空格后接函数名
  • 函数名与变量命名规则基本一样,函数名只能是字母,数字,下划线的组合,并且之间不能包含空格,数字不能放在变量名首位,但是不同的是:函数名不区分大小写
  • 所谓参数其实就是变量
  • 函数名后接括号,括号内跟参数,参数全都有[](中括号)括起来了,代表参数可填可不填
  • 如果有参数的话,参数后可以接(=)等号,等号接默认值。参数值也是用[](中括号)括起来的,代表选填
  • 函数后的参数变量,主要功能是把函数体外的变量值,传入函数体内来使用,函数体的变量和函数体外的变量通常是两个不同的变量, 函数体的变量与函数体外的变量没有关系
  • 函数中的具体功能(功能体)用大括号括起来,代表这是一个函数的功能区间
  • 函数可以有返回值也可以没有返回值,用[](中括号)括起来的,代表选填。
  • return后接空格,空格后接返回值,若有return,return后的代码均不执行。
  • 函数的执行没有顺序关系,可以在定义处之前的位置调用
  • 函数不能被定义两次,即函数不能被重载

6.1 函数的定义:函数是一个相对封闭的程序段,很多函数需要传递参数才能操作。

6.2 向函数传递参数

6.3 通过引用传递参数

6.4 默认参数的值

6.5 参数类型申明

6.6 可变数量的参数列表

6.7 使用全局变量:使用关键global来使用函数外部的全局变量。

6.8 使用静态变量:函数执行完,静态变量中值不会消失,使用关键字static。

6.9 从函数返回值:使用return语句从函数返回值。

function myfunction(){
     return 1;   
}
echo myfunction();      //输出1

6.10 可变函数(也叫变量函数)

  在PHP中,可以将函数赋值给一个变量,这就是可变函数。在解析PHP代码的时候,如果一个变量名后有圆括号,PHP将寻找与变量的值同名的函数。

function myfunction(){
    echo 'myfunction';  
}
$a='myfunction';
$a();     //输出:myfunction     因为$a被替代为myfunction

  一个典型的用法,将函数名称放到一个数组中,然后依次调用这些函数。

$functions=['fun1','fun2','fun3'];  //假设已经定义了fun1、fun2、fun3函数
foreach($functions as $fun){
    $fun();    //依次调用数组中的函数
}

6.11 匿名函数

所谓匿名,就是没有名字。

匿名函数,也就是没有函数名的函数。

匿名函数的第一种用法,直接把赋数赋值给变量,调用变量即为调用函数。

匿名函数的写法比较灵活。

$myfunction=function(){
    echo 'myfunction';
};
$myfunction();   //输出myfunction

 6.12 回调函数

回调函数,可以配合匿名函数和变量函数实现更加优美、复杂的一种函数结构。

回调函数,就是在处理一个功能的时候,我让让这个功能自定义能力再强一些,我准许调用这个函数的时候,还可以传入一个函数配合、协助进行处理。

6.13 内部函数

内部函数,是指在函数内部又声明了一个函数。

注意事项:

  • 内部函数名,不能是已存在的函数名
  • 假设在函数a里面定义了一个内部函数,不能定用两次函数a。

6.14 PHP自定义函数之变量作用域

  • 通过$GLOBLAS来读取外部变量
  • 通过$GLOBLAS,在函数内修改外部变量
  • 通过$GLOBLAS,在函数内创建全局变量

6.15 递归函数

递归函数,函数体内调用函数自己。

  • 代码是从上到下执行的,所有代码没有exit等停止符,函数必须执行完。
  • 如果函数从函数A跳至函数B后,必须把函数B执行完成再执行函数A余下的代码。
  • 递归函数必须要能执行完有结束条件,不然函数就会限入死循环。函数会永远的自我执行下去。
<?php
$fun5=2;
function dg($fun5){
    $fun5=$fun5-1;

    if($fun5>0){
        dg($fun5);
        
    }else{
        echo '$fun5的值为'.$fun5.',$fun5终于<=0了<br/>';
    }
    echo '$fun5的值为'.$fun5.',$fun5>0<br/>';
}
dg($fun5);
?>

//运行结果:
//$fun5的值为0,$fun5终于<=0了
//$fun5的值为0,$fun5>0
//$fun5的值为1,$fun5>0

上述代码先执行完$fun5=0,然后执行$fun5=1。

 

6.16 自定义函数之静态变量

静态变量的特点是:声明一个静态变量,第二次调用函数的时候,静态变量不会再初始化变量,会在原值的基础上读取执行。应用:函数调用次数统计。

 

6.17 系统内置函数

内置函数的使用:

  • 直接返回布尔型,如bool copy ()
  • 带有MIXED参数的函数如何调用。Mixed表示任何类型的数据。如Array_unshift()
  • 参数中带有&符的参数,一定要传一个变量做为参数。函数里面改变了他的值。
  • 带有[]的参数,表示可选项。
  • 带有…的参数,表示可以传任意多个参数。
  • 带有callback的参数,表示回调函数。需要传一个函数进来。Array_map()
  • 函数支持的版本你要了解

 

posted @ 2018-07-15 19:30  飞鱼0725  阅读(316)  评论(0编辑  收藏  举报