php学习笔记

作者: Scallions_ | 来源:发表于2016-12-10 16:29 被阅读0次

    常用函数

    var_dump() 函数返回数组的数据类型和值

    unset() 释放

    bool define(string $constant_name, mixed $value[, $case_sensitive = true]) 定义常量

    mixed constant(string constant_name) 调用常数--第一个参数constant_name为要获取常量的名称,也可为存储常量名的变量。如果成功则返回常量的值,失败则提示错误信息常量没有被定义。(注:mixed表示函数返回值类型为多种不同的类型,string表示参数类型为字符串类型)

    bool defined(string constants_name)判断一个常量是否已经定义,它只有参数constant_name,指的是要获取常量的名称,若存在则返回布尔类型true,否则返回布尔类型false; (注:bool表示函数返回值类型为布尔类型)

    魔术方法

    __set,__get,__isset,__unset,__call,__clone

    字符串

    trim去除一个字符串两端空格。trim($str);

    rtrim是去除一个字符串右部空格,其中的r是right的缩写。

    ltrim是去除一个字符串左部空格,其中的l是left的缩写。

    strlen()函数获取字符串长度。strlen($str);

    mb_strlen()函数获取字符串中中文长度。mb_strlen($str,"UTF8")

    substr(字符串变量,开始截取的位置,截取个数)substr($str, 2, 4);

    mb_substr(字符串变量,开始截取的位置,截取个数, 网页编码)中文   mb_substr($str, 4, 2, 'utf8');

    strpos(要处理的字符串, 要定位的字符串, 定位的起始位置[可选]) strpos($str, 'imooc');

    str_replace(要查找的字符串, 要替换的字符串, 被搜索的字符串, 替换进行计数[可选])str_replace('js', 'php', $str);

    sprintf(格式, 要转化的字符串)返回:格式化好的字符串 sprintf('%01.2f', $str)

    1、这个 % 符号是开始的意思,写在最前面表示指定格式开始了。 也就是 "起始字符", 直到出现 "转换字符" 为止,就算格式终止。

    2、跟在 % 符号后面的是 0, 是 "填空字元" ,表示如果位置空着就用0来填满。

    3、在 0 后面的是1,这个 1 是规定整个所有的字符串占位要有1位以上(小数点也算一个占位)。

    如果把 1 改成 6,则 $result的值将为 099.90

    因为,在小数点后面必须是两位,99.90一共5个占位,现在需要6个占位,所以用0来填满。

    4、在 %01 后面的 .2 (点2) 就很好理解了,它的意思是,小数点后的数字必须占2位。 如果这时候,$str 的值为9.234,则 $result的值将为9.23.

    为什么4 不见了呢? 因为在小数点后面,按照上面的规定,必须且仅能占2位。 可是 $str 的值中,小数点后面占了3位,所以,尾数4被去掉了,只剩下 23。

    5、最后,以 f "转换字符" 结尾。

    implode(分隔符[可选], 数组)返回值:把数组元素组合为一个字符串 explode(',', $str);

    explode(分隔符[可选], 字符串)返回值:函数返回由字符串组成的数组 explode('-',$str);

    addslashes()函数说明:用于对特殊字符加上转义字符,返回一个字符串。返回值:一个经过转义后的字符串

    // 1. addslashes此函数在DBMS没有自己的转义函数时候使用

    // 2. htmlspecialchars把HTML中的几个特殊字符转义成HTML Entity形式

    // 3. htmlentities把HTML中可以转义的内容转义成HTML Entity

    // 4. mysql_real_escape_string调用MySQL的库函数对特殊字符进行转义

    // 5. strip_tags滤掉NUL,HTML和PHP的标签

    preg_match用于执行一个正则匹配,常用来判断一类字符模式是否存在。preg_match($r, $str);return bool  preg_match($p, $str, $match);

    file_get_contents,可以将整个文件全部读取到一个字符串中。file_get_contents('./test.txt');

    fopen,fgets,fread等方法,fgets可以从文件指针中读取一行,freads可以读取指定长度的字符串。

    一般情况下在对文件进行操作的时候需要先判断文件是否存在,PHP中常用来判断文件存在的函数有两个is_file与file_exists.

    如果只是判断文件存在,使用file_exists就行,file_exists不仅可以判断文件是否存在,同时也可以判断目录是否存在,从函数名可以看出,is_file是确切的判断给定的路径是否是一个文件。

    is_readable与is_writeable在文件是否存在的基础上,判断文件是否可读与可写。



    系统常量

    (1)__FILE__ :php程序文件名。它可以帮助我们获取当前文件在服务器的物理位置。

    (2)__LINE__ :PHP程序文件行数。它可以告诉我们,当前代码在第几行。

    (3)PHP_VERSION:当前解析器的版本号。它可以告诉我们当前PHP解析器的版本号,我们可以提前知道我们的PHP代码是否可被该PHP解析器解析。

    (4)PHP_OS:执行当前PHP版本的操作系统名称。它可以告诉我们服务器所用的操作系统名称,我们可以根据该操作系统优化我们的代码。


    巴拉

    Heredoc结构形式

    首先使用定界符表示字符串(<<<),接着在“<<<“之后提供一个标识符GOD,然后是字符串,最后以提供的这个标识符结束字符串。如图:

    在赋值符号后,输入定界符“<<<”,接着是标识符,你可以用你的女神作为标识符“GOD”,如第2行,也可以使用你喜欢的狗狗,“DOG”作为标识符,但是,结尾处的标识符也必须是一样的。此外,在结尾的一行,如第7行,一定要另起一行,并且此行除了“GOD”,并以“;”号结束之外,不能有任何其他字符,前后都不能有,包括空格,否则会出现错误的哦。切记切记哦。


    PHP赋值运算符

    PHP的赋值运算符有两种,分别是:

    (1)“=”:把右边表达式的值赋给左边的运算数。它将右边表达式值复制一份,交给左边的运算数。换而言之,首先给左边的运算数申请了一块内存,然后把复制的值放到这个内存中。

    (2)“&”:引用赋值,意味着两个变量都指向同一个数据。它将使两个变量共享一块内存,如果这个内存存储的数据变了,那么两个变量的值都会发生变化。

    比较运算符

    比较运算符主要是用于进行比较运算的,例如:等于、全等、不等、大于、小于。在PHP中常用的比较运算符如下表:

    对象比较,当同一个类的两个实例的所有属性都相等时,可以使用比较运算符==进行判断,当需要判断两个变量是否为同一个对象的引用时,可以使用全等运算符===进行判断。

    三元运算符

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

    逻辑运算符

    逻辑运算符主用是进行逻辑运算的,例如:逻辑与、逻辑或、逻辑异或、逻辑非等,在PHP中常用的逻辑运算符如下表:

    PHP中的字符串连接运算符

    字符串连接运算符是为了将两个字符串进行连接,PHP中提供的字符串连接运算符有:

    (1)连接运算符(“.”):它返回将右参数附加到左参数后面所得的字符串。

    (2)连接赋值运算符(“.=”):它将右边参数附加到左边的参数后。

    PHP中的错误控制运算符

    PHP中提供了一个错误控制运算符“@”,对于一些可能会在运行过程中出错的表达式时,我们不希望出错的时候给客户显示错误信息,这样对用户不友好。于是,可以将@放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉;

    如果激活了track_error(这个玩意在php.ini中设置)特性,表达式所产生的任何错误信息都被存放在变量$php_errormsg中,此变量在每次出错时都会被覆盖,所以如果想用它的话必须尽早检查。

    需要注意的是:错误控制前缀“@”不会屏蔽解析错误的信息,不能把它放在函数或类的定义之前,也不能用于条件结构例如if和foreach等。

    foreach

    在PHP中foreach循环语句,常用于遍历数组,一般有两种使用方式:不取下标、取下标。

    (1)只取值,不取下标

    foreach (数组 as 值){

    //执行的任务

    }

    (2)同时取下标和值

    foreach (数组 as 下标 => 值){

    //执行的任务

    }

    数组

    $arr[0]="";

    $arr= array();

    $arr=array("key"=>"value");

    PHP函数之可变函数

    所谓可变函数,即通过变量的值来调用函数,因为变量的值是可变的,所以可以通过改变一个变量的值来实现调用不同的函数。经常会用在回调函数、函数列表,或者根据动态参数来调用不同的函数。可变函数的调用方法为变量名加括号。

    function name() {

    echo 'jobs';

    }

    $func = 'name';

    $func(); //调用可变函数

    可变函数也可以用在对象的方法调用上。

    class book {

    function getName() {

    return 'bookname';

    }

    }

    $func = 'getName';

    $book = new book();

    $book->$func();

    类属性

    一般通过->对象操作符来访问对象的属性或者方法,对于静态属性则使用::双冒号进行访问。当在类成员方法内部调用的时候,可以使用$this伪变量调用当前对象的属性。

    静态

    静态方法中,$this伪变量不允许使用。可以使用self,parent,static在内部调用静态方法与属性。

    对象序列化

    可以通过serialize方法将对象序列化为字符串,用于存储或者传递数据,然后在需要的时候通过unserialize将字符串反序列化成对象进行使用。

    class Car {

    public $name = 'car';

    }

    $a = new Car();

    $str = serialize($a); //对象序列化成字符串

    echo $str.'
    ';

    $b = unserialize($str); //反序列化为对象

    var_dump($b);

    正则表达式

    PCRE库函数中,正则匹配模式使用分隔符与元字符组成,分隔符可以是非数字、非反斜线、非空格的任意字符。经常使用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~),例如:

    /foo bar/

    #^[^0-9]$#

    ~php~

    如果模式中包含分隔符,则分隔符需要使用反斜杠(\)进行转义。

    /http:\/\//

    如果模式中包含较多的分割字符,建议更换其他的字符作为分隔符,也可以采用preg_quote进行转义。

    $p = 'http://';

    $p = '/'.preg_quote($p, '/').'/';

    echo $p;

    分隔符后面可以使用模式修饰符,模式修饰符包括:i, m, s, x等,例如使用i修饰符可以忽略大小写匹配:

    $str = "Http://www.imooc.com/";

    if (preg_match('/http/i', $str)) {

    echo '匹配成功';

    }

    元字符与转义

    正则表达式中具有特殊含义的字符称之为元字符,常用的元字符有:

    \ 一般用于转义字符

    ^ 断言目标的开始位置(或在多行模式下是行首)

    $ 断言目标的结束位置(或在多行模式下是行尾)

    . 匹配除换行符外的任何字符(默认)

    [ 开始字符类定义

    ] 结束字符类定义

    | 开始一个可选分支

    ( 子组的开始标记

    ) 子组的结束标记

    ? 作为量词,表示 0 次或 1 次匹配。位于量词后面用于改变量词的贪婪特性。 (查阅量词)

    * 量词,0 次或多次匹配

    + 量词,1 次或多次匹配

    { 自定义量词开始标记

    } 自定义量词结束标记

    //下面的\s匹配任意的空白符,包括空格,制表符,换行符。[^\s]代表非空白符。[^\s]+表示一次或多次匹配非空白符。

    $p = '/^我[^\s]+(苹果|香蕉)$/';

    $str = "我喜欢吃苹果";

    if (preg_match($p, $str)) {

    echo '匹配成功';

    }

    元字符具有两种使用场景,一种是可以在任何地方都能使用,另一种是只能在方括号内使用,在方括号内使用的有:

    \ 转义字符

    ^ 仅在作为第一个字符(方括号内)时,表明字符类取反

    - 标记字符范围

    其中^在反括号外面,表示断言目标的开始位置,但在方括号内部则代表字符类取反,方括号内的减号-可以标记字符范围,例如0-9表示0到9之间的所有数字。

    //下面的\w匹配字母或数字或下划线。

    $p = '/[\w\.\-]+@[a-z0-9\-]+\.(com|cn)/';

    $str = "我的邮箱是Spark.eric@imooc.com";

    preg_match($p, $str, $match);

    echo $match[0];

    \d表示匹配数字

    关于match数组的说明:

    文档上的解释为:如果提供了参数 matches ,它将被填充为搜索结果。 $matches[0] 将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。

    文档上对于子组的说明为:子组通过圆括号分隔界定,并且它们可以嵌套。

    正则表达式的搜索与替换在某些方面具有重要用途,比如调整目标字符串的格式,改变目标字符串中匹配字符串的顺序等。

    例如我们可以简单的调整字符串的日期格式:

    $string = 'April 15, 2014';

    $pattern = '/(\w+) (\d+), (\d+)/i';

    $replacement = '$3, ${1} $2';

    echo preg_replace($pattern, $replacement, $string); //结果为:2014, April 15

    其中${1}与$1的写法是等效的,表示第一个匹配的字串,$2代表第二个匹配的。

    通过复杂的模式,我们可以更加精确的替换目标字符串的内容。

    $patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/',

    '/^\s*{(\w+)}\s*=/');

    $replace = array ('\3/\4/\1\2', '$\1 =');//\3等效于$3,\4等效于$4,依次类推

    echo preg_replace($patterns, $replace, '{startDate} = 1999-5-27'); //结果为:$startDate = 5/27/1999

    //详细解释下结果:(19|20)表示取19或者20中任意一个数字,(\d{2})表示两个数字,(\d{1,2})表示1个或2个数字,(\d{1,2})表示1个或2个数字。^\s*{(\w+)\s*=}表示以任意空格开头的,并且包含在{}中的字符,并且以任意空格结尾的,最后有个=号的。

    用正则替换来去掉多余的空格与字符:

    $str = 'one    two';

    $str = preg_replace('/\s+/', ' ', $str);

    echo $str; // 结果改变为'one two'

    GD

    要对图形进行操作,首先要新建一个画布,通过imagecreatetruecolor函数可以创建一个真彩色的空白图片:

    $img = imagecreatetruecolor(100, 100);

    GD库中对于画笔所用的颜色,需要通过imagecolorallocate函数进行分配,通过参数设定RGB的颜色值来确定画笔的颜色:

    $red = imagecolorallocate($img, 0xFF, 0x00, 0x00);

    然后我们通过调用绘制线段函数imageline进行线条的绘制,通过指定起点跟终点来最终得到线条。

    imageline($img, 0, 0, 100, 100, $red);

    线条绘制好以后,通过header与imagepng进行图像的输出。

    header("content-type: image/png");

    imagepng($img);

    最后可以调用imagedestroy释放该图片占用的内存。

    imagedestroy($img);

    通过上面的步骤,可以发现PHP绘制图形非常的简单,但很多时候我们不只是需要输出图片,可能我们还需要得到一个图片文件,可以通过imagepng函数指定文件名将绘制后的图像保存到文件中。

    imagepng($img, 'img.png');

    GD库可以进行多种图形的基本操作,常用的有绘制线条,背景填充,画矩形,绘制文字等。

    跟绘制线条类似,首先需要新建一个图片与初始化颜色。

    $img = imagecreatetruecolor(100, 100);

    $red = imagecolorallocate($img, 0xFF, 0x00, 0x00);

    然后使用imagestring函数来进行文字的绘制,这个函数的参数很多:imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ),可以通过$font来设置字体的大小,x,y设置文字显示的位置,$s是要绘制的文字,$col是文字的颜色。

    imagestring($img, 5, 0, 0, "Hello world", $red);

    header("content-type: image/png");

    imagepng($img);

    imagedestroy($img);

    前面我们已经了解到,通过imagepng可以直接输出图像到浏览器,但是很多时候,我们希望将处理好的图像保存到文件,以便可以多次使用。通过指定路径参数将图像保存到文件中。

    $filename = 'img.png';

    imagepng($img, $filename);

    使用imagepng可以将图像保存成png格式,如果要保存成其他格式需要使用不同的函数,使用imagejpeg将图片保存成jpeg格式,imagegif将图片保存成gif格式,需要说明的是,imagejpeg会对图片进行压缩,因此还可以设置一个质量参数。

    $filename = 'img.jpg';

    ​imagejpeg($img, $filename, 80);

    imagecreatefromjpeg可以直接从图片文件创建图像。

    异常

    1、基本语法

    try{

    //可能出现错误或异常的代码

    //catch表示捕获,Exception是php已定义好的异常类

    } catch(Exception $e){

    //对异常处理,方法:

    //1、自己处理

    //2、不处理,将其再次抛出

    }

    2、处理处理程序应当包括:

    Try - 使用异常的函数应该位于 "try"  代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。

    Throw - 这里规定如何触发异常。注意:每一个 "throw" 必须对应至少一个 "catch",当然可以对应多个"catch"

    Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象。

    //创建可抛出一个异常的函数

    function checkNum($number){

    if($number>1){

    throw new Exception("异常提示-数字必须小于等于1");

    }

    return true;

    }

    //在 "try" 代码块中触发异常

    try{

    checkNum(2);

    //如果异常被抛出,那么下面一行代码将不会被输出

    echo '如果能看到这个提示,说明你的数字小于等于1';

    }catch(Exception $e){

    //捕获异常

    echo '捕获异常: ' .$e->getMessage();

    }

    上面代码将获得类似这样一个错误:

    捕获异常:: 异常提示-数字必须小于等于1

    例子解释:

    上面的代码抛出了一个异常,并捕获了它:

    创建 checkNum() 函数。它检测数字是否大于 1。如果是,则抛出一个异常。

    在 "try" 代码块中调用 checkNum() 函数。

    checkNum() 函数中的异常被抛出

    "catch" 代码块接收到该异常,并创建一个包含异常信息的对象 ($e)。

    通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息

    相关文章

      网友评论

        本文标题:php学习笔记

        本文链接:https://www.haomeiwen.com/subject/xnkkuttx.html