PHP学习笔记

PHP Feb 16, 2017

此为我的PHP学习笔记,随时更新学到的内容;记录自己的学习也将笔记分享给需要的人;

输出服务器PHP信息

<?php phpinfo(); ?>

一、写法

1.PHP标记

主要以

<?php

开始和以

?>

为结束

例如

<?php echo "Hello World"; ?>

XML风格

<?php echo "<p>Hello World</p>"; ?>

简短风格

<? echo "Hello World"; ?>

script风格

<script language="php">
    echo "Hello World";
</script>

ASP风格

<% echo "Hello World"; %>
2.注释

PHP支持C/C++和shell的注释风格;

<?php
    /*
    此种注释风格为多行注释 
    */
    // 下面会输出Hello World
    echo "Hello World";
    # 上面会输出Hello World
?>
3.连接操作符

如下

<?php
    $num = "123";
    echo $num."456";
?>
4.字符串

在双引号中可以解析变量和转义字符,但是单引号中不能解析变量且只能解析转义字符单引号(')和转义字符本身(\),只会将变量名以字符串类型解析;

$num = 10;
$str1 = "$num is number";
$str2 = '$num is string';

echo $str1;      // 10 is number
echo "<br>";
echo $str2;      // $num is string

双引号中的变量前后必须有空格,也就是断点,如果与字符串混淆在一起,就会导致未知变量,但是可以使用{}将变量括起来,如下;

$num = 10;
$str = "this{$num}is demo";
5.定界符

(1) 使用 <<< Name 声明(符号和Name之间不能有空格);

(2) 在开始的定界符(自定义的字符串中)一定要左边接着<<<,写完定界符,一定要直接回车,不能有空格;

(3) 在结尾的字符串定界中,一定要顶头写(没有Tab),和开始的Name要一致,并直接回车;

$num = 10;
$str = <<<start
    Hi \n:
    this $num is a Demo;
start;

echo $str;

给Name加上单引号,将使定界符默认支持双引号的功能改为支持单引号的功能,例如下面代码会直接输出字符串,而不会输出变量$num的值;

$num = 10;
$str = <<<'start'
    this $num is a Demo;
start;

二、函数

声明

function(){

}

参数的默认值只能是标量,如果参数有默认值的话,调用函数时可以不传参,如果传了就会替换默认值;

三、变量

1.变量声明

以 $ 开头,变量名不能以数字开头,区分大小写;

    $int = 10;
2.可变变量
$old = "hello";
$$old = 20;

echo $hello;      // 20

3.取址符号

& 符号

$a = 10;
$b = &$a;

echo $a,"<br>";     // 10
echo $b;                // 10
  • 只有变量有地址,也就是只有变量才能引用;

  • 一个变量的值发生变化,另一个变量的值也会发生变化;

  • 在使用unset()这个函数时,如果有引用关系,只是解除了这种引用关系,只删除一个变量,另一个变量还在;

  • 如果有给一个变量添加一个新引用,那么这个变量之前的引用关系会被解除,$a / $b=$a / $b=$c / 那么$b不再和$a是引用关系,而和$c是引用关系;

四、数据类型

1.强制转换数据类型

获取数据类型的函数

var_dump();

getType();

(1) setType()函数法

语法:

steType(变量, 类型);

例子:

$str = "10";

setType($str, "integer");

echo getType($str);        // int

(2)赋值声明法

语法:

(类型)数据;

例子:

$int = 10;

$str = (string)$int;       // 在数据前面声明数据类型,只改变当前变量的类型,$int类型不变

echo getType($str);        // string

(3)
intval()、floatval()、strval();

2.自动转换数据类型
$a = 10;
$b = 20.4;
$c = $a + $b;

var_dump($c);        // float(30.4)

整型占4个字节、布尔型占一个字节,所以小的迁就大的;

$a = true;
$b = 10;
$c = $a + $b;

var_dump($c);        // int(11)
  • 字符串和整型会转成整型;

  • 字符串和布尔型会转成整型;

  • 字符串和浮点型会转成浮点型;

  • 整型和浮点型会转成浮点型;

  • 整型和布尔型会转成整型;

  • 浮点型和布尔型会转成浮点型;

3.变量类型的测试函数
is_bool();        // 判断是否是布尔型;

is_int();        // is_integer()和is_long()判断是否为整型;

is_float();        // is_double()和is_real()判断是否为浮点型;

is_string();        // 判断是否为字符串;

is_array();        // 判断是否为数组;

is_object();        // 判断是否为对象;

is_resource();        // 判断是否为资源类型;

is_null();        // 判断是否为null;

is_scalar();        // 判断是否为标量;

is_numberic();        // 判断是否为任何类型的数字和数字字符串;

is_callable();        // 判断是否为有效的函数名;

例子:

$int = 10;

if (is_float($int)){
    echo "变量int是浮点型";
}else{
    echo "变量int不是浮点型";
};

五、常量

1.常量一旦被声明,它的值就不会被改变;
2.常量名称默认是区分大小写的,习惯上常量名全部大写;
3.常量是全局的;
4.常量名前不要加$符号;
5.常量使用函数 define()声明;

define("常量名", "值");

define("ROOT", "Hello World");
define("PASSWD", 123456);

echo ROOT;

6.如果常量没有被声明,调用时会以字符串类型输出常量名;

echo ROOT        // ROOT

7.可以使用define()函数的第三个参数(true或false)来决定是否让这个常量名称区分大小写;

define("ROOT", 100, true);

8.常量不能使用unset()清除一个常量;
9.使用defined()函数来判断一个常量是否存在;

define("ONE", "TWO");

if(defined("ONE")){
    echo "常量ONE存在";
}else{
    echo "常量ONE不存在";
}

10.还可以使用constant()函数读取常量的值;

define("ONE", 10);

echo constant("ONE");
echo "<br/>";
echo ONE;

11.使用 get_ defined_constants()函数获取所有已定义的常量列表;

echo get_defined_constants();
echo "<br/>";
var_dump(get_defined_constants());

六、运算符

1.算术运算符

+  -  *  /  %  ++  --
加  减  乘  除  取模  加加  减减

加加和减减:符号在左和在右的区别

$a = 5;

++$a;        // 先加再用
$a++;        // 先用再加

// 上面两个结果一样

$b1 = 5;
$b2 = 5;

$c = ++$b1;    
$d = $b2++;

echo $c;        // 6                       
echo "<br/>";
echo $d;        // 5

例子

$a =5;

$b = $a++ + ++$a;

echo $a;        // 7                       
echo "<br/>";
echo $b;        // 12

注意:布尔型不参与加加和减减;

2.赋值运算符

=  +=  -=  /=  *=  %= .=

.=的作用:将右边内容附加到左边内容;

$str = "我的名字";
$str .= "叫";
$str .= "Weic";

echo $str;        // 我的名字叫Weic
赋值  加等  减等  乘等  除等

3.比较运算符

>  <  ==  >=  <=  ===  !=  !==
大于  小于  等于  大于等于  小于等于  不等于  不等于

4.逻辑运算符

    &&  ||  !
    与  或  非

5.位运算符

&  |  ^  ~  >>  <<

6.其他运算符

?  :  @  =>  ->
三元运算符

("?:")三元运算符也是一个比较运算符,对于表达式(expr1)?(expr2):(expr3),如果expr1的值为true,则此表达式的值为expr2,否则为expr3。

<?php 
$a = TRUE; //A同意
$b = TRUE; //B同意
$c = FALSE; //C反对
$d = FALSE; //D反对
//咱顺便复习下三元运算符
echo ($a and $b)?"通过":"不通过";
echo "<br />";
echo($a or $c)?"通过":"不通过";
echo "<br />";
echo ($a xor $c xor $d)?"通过":"不通过";
echo "<br />";
echo !$c?"通过":"不通过";
echo "<br />";
echo $a && $d?"通过":"不通过";
echo "<br />";
echo $b || $c || $d?"通过":"不通过";
?>
错误控制运算符

PHP 支持一个错误控制运算符:“@”;当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

运算符的优先级和表达式

表达式:有变量和运算符参与的语句。简单的说,任何有值的东西都是表达式;

$a > 5;

$b = 5;

七、字符串操作

字符串的整理:chop()、ltrim()和trim()

trim()函数可以清除字符串开始位置和结束位置的空格,并将结果字符串返回。默认情况下,除去的字符串是换行和回车符(\n和\r)、水平和垂直制表符(\t和\xoB)、字符串结束符(\o)和空格。

除了这个默认的过滤字符列表外,也可以在该函数的第二个参数中提供要过滤的特殊字符。更具特定用途,可以会希望使用ltrim()函数或rtrim()函数。
这两个函数的功能都类似于trim()函数,他们都以需要处理的字符串作为输入参数,然后返回经过格式化的字符串。这三个函数的不同之处在于trim()将出去整个字符串前后的空格,而ltrim()只从字符串的开始出(左边)除去空格,rtrim()只从字符串的借书处(右边)除去空格。

<?php

$str = " world ";

echo "hello".$str;            // hello world
echo "<br>";
echo "hello".trim($str," ");            // helloworld
echo "<br>";
echo "hello".ltrim($str,"w");

八、流程控制

1.顺序结构
3.分支结构

switch语句

switch语句的工作方式类似于if语句,但是它允许条件可以有多于两个的可能值。在一个if语句中,条件或者为true,或者为false。而在switch语句中,只要条件值是一个简单的数据类型(整数、字符串或浮点型),条件就可以具有任意多个不同的值。

必须提供一个case语句来处理每一个条件值,并且提供相应的动作代码。此外,还应该有一个默认的case条件来处理没有提供任何特定值的情况。

1.如果case中的语句过多,就可以将多个语句做成一个函数之类的;
2.switch(变量) 变量类型只允许整数和字符串;

switch($str){
    case "a" :
        echo "this is a";
        break;
    case "b" :
        echo "this is b";
        break;
    default :
        echo "this is default";
        break;
}

匹配多个值:

switch(){
    case 1 :
    case 2 :
    case 3 :
        echo "hello";
}
3.循环结构

while循环

$num = 0;
while($num <= 100){
    echo $num."<br>";
    $num++;
}