zoukankan      html  css  js  c++  java
  • 初识PHP

    初识PHP

      虽然是做前端的,可是平时看书、做项目都会与后端PHP相关,但却不是很了解,并经常听PHP大神说:PHP是世界上最好的语言!因此,通过这篇博文学习、总结PHP,来认识认识这个“世界上最好的语言”。

      

      第一部分:PHP简介

      1.PHP的全称是Hypertext Preprocessor,即超文本预处理器,它是一种通用开源脚本语言。们知道JavaScript也是一种运行在浏览器上脚本语言来控制页面内容,而PHP是运行在服务器端的脚本语言读取数据库把内容显示在页面上。另外,PHP是开源的,免费使用的,因此有着无数的民间高手,贡献这很多使用的类库,使其有强大的生命力,相对于微软公司的ASP.NET这种收费的情况而言还是有些些优势的,并且PHP可以运行在各种平台上,但是ASP.NET只能运行在windows平台下。当然ASP.NET也有很多优秀的地方是PHP不可及的。

      2.那么什么是PHP文件呢?我们有时可以看到以.php作为后缀名的文件,实际上这就是PHP文件,该文件可以包含文本、HTML、JavaScript代码和PHP代码,且PHP代码在服务器上执行,结果以纯HTML形式返回给浏览器。

      3.PHP能做什么呢? 

    • 可以生成动态的页面内容(这个在前端通过ajax实现)
    • 可以创建、打开、读取、写入、关闭服务器上的文件
    • 可以收集表单数据(我们在前端写的表单 其中包括name value,这些都是和PHP相关的)
    • 可以添加、删除、修改我们的数据库中的数据

      当然,除此之外,PHP还有很多强大的功能。通过PHP,我们不再限于输出HTML,还可以输出图像、PDF文件、flash电影等。

      4.为什么使用PHP? 前面介绍过,它可以在不同的平台上运行(windows、linux、unix、MAC os x等),并且它与目前几乎所有的正在被使用的服务器兼容(Apache、IIS等)。

      

      第二部分:PHP语法

     一. 基本的PHP语法如下:

      PHP脚本可以放在文档中的任何位置,PHP脚本以<?php开始,以?>结束,如下代码:

    <?php
        //PHP代码
    ?>
    

       php文件的默认文件扩展名为.php,这个文件中通常包含了HTML标签和一些PHP脚本代码,比如下面的PHP文件实例:

    <!DOCTYPE html>
    <html>
    <body>
    <h1> 我的第一个PHP文件</h1>
    <?php 
    echo "Hello World!"; 
    ?> 
    </body>
    </html>
    

      运行结果如下:

        对于上面的PHP文件,有以下几点需要注意:

    • 我在文件中没有加入<meta>标签,实际上也是可以加的,只是我省略了而已
    • 我们注意到PHP中的每个代码行都必须以分号结束,分号是一种分隔符,用于把指令集区分开来。
    • echo指令用于输出,另外还有print指令。注意发音:

      

          另外,我在PHP代码里使用了注释。//为单行注释,和JavaScript是相同的。多行注释可以使用/* */。

      

      

    二.PHP中的变量

       1.基本概念

       和其他所有语言都一样,变量即存储信息的“容器”。与代数类似,可以给PHP变量赋予某个值(比如 x=10)或者表达式(z=x+y)。 毫无疑问的,变量可以是很短的名称(如x和y这种只有一个字母)或者是更具描述性的名称(如age、carname、totalvolume)。规则如下;

    • 变量必须以$符号开始,后面跟着变量的名称。
    • 变量名必须以字母或者下划线字符开始(注意:在JavaScript中变量必须以字母、下划线或$开始,这里类似的,知识必须用$说明是一个变量)
    • 变量名只能包含字母、数字以及下划线(A-z、0-9和_),这个和JavaScript是相同的。
    • 变量名中不能包含空格。
    • 变量名是区分大小写的。(注意:PHP语句和PHP变量都是区分大小写的

      

       2.创建(声明PHP变量)

         实际上,PHP没有变量声明的命令。变量在我们第一次赋值给它的时候被创建。如下所示:

    <?php
    $txt="hello world";
    $x=5;
    $y=10;
    $z=$x+$y;
    ?>
    

      通过上面的php代码,实际上我们就创建了$txt变量、$x变量、$y变量、$z变量。

    通过上面的例子我们可以看出:

    • 把一个文本值(即字符串)赋值给一个变量时,必须在文本值两侧加上双引号。
    • 可以看出,我们声明变量时没有指定该变量的数据类型,故PHP和JavaScript一样都是弱类型语言。而强类型语言如Java、C++是需要在使用变量前先声明(定义)变量的类型(如int double float string等等)和名称的。于是,PHP会根据变量的值自动把变量转化为正确的数据类型。

        

       3.变量作用域

        和其他所有语言一样,变量的作用域是脚本中变量可以被引用/使用的部分。

        PHP中有四种不同的变量作用域。分别是 local 、global、static、parameter。

        (1)首先讨论全局变量和局部变量。

            全局变量与全局作用域:在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,若要在一个函数中访问全局变量,需要使用global关键字。(关键:这里的全局变量竟然不能被函数访问!!!!

          局部变量:在PHP函数内部声明的变量时局部变量,仅能在函数内部访问(这一点与JavaScript相同)。 

          举例如下:

      

    <?php 
    $x=5; // 全局变量 
    
    function myTest() 
    { 
        $y=10; // 局部变量 
        echo "<p>测试函数内变量:<p>"; 
        echo "变量 x 为: $x"; 
        echo "<br>"; 
        echo "变量 y 为: $y"; 
    }  
    
    myTest(); 
    
    echo "<p>测试函数外变量:<p>"; 
    echo "变量 x 为: $x"; 
    echo "<br>"; 
    echo "变量 y 为: $y"; 
    ?> 
    

      结果如下:

      

      几点讨论:

    • 调用myTest()函数时,只输出了y,因为y是函数内的局部变量,而没有输出x!(即前面所提到的,函数不能直接访问全局变量
    • 在外部直接输出x和y时,只输出了x,因为x时全局变量,而没有输出y,因为y时局部变量。
    • 我们可以看到代码 echo "变量 x 为: $x"; 在PHP中可以将变量放进字符串中输出(而在JavaScript中必须将变量和字符串使用+来拼接)。 

      (2).global关键字

      刚刚我们认识了PHP变量中这个奇怪的特点:即函数不能访问全局变量!

      但是我们可以通过global关键字使得函数可以访问全局变量。如下例所示:

      

    <?php
    $x=5;
    $y=10;
    function myTest()
    {
       global $x,$y;
       $y=$x+$y;
      }
    myTest();
    echo $y;
    ?>
    

        之前说函数不能访问全局变量,但是只要我们把想要访问的全局变量在函数内加上global关键字就可以正常访问了。

      实际上,PHP将所有的全局变量存储在一个名为$GLOBALS[index]的数组中。index保存变量的名称。这个数组可以在函数内部访问,也可以用来跟新全局变量。上面代码改写为:

    <?php
    $x=5;
    $y=10;
    
    function myTest()
    {
    $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
    } 
    
    myTest();
    echo $y;
    ?>
    

     

      (3)static作用域

      我们知道,当一个函数被调用之后,其内部的局部变量就会被销毁以释放内存,如果我们不想其被销毁,可以在声明变量时使用static关键字。如下:

    <?php
    function myTesy()
    {
     static $x=0;
       echo $x;
        $x++;
    }
    myTest();
    myTest();
    myTest();
    ?>
    

      如果我们不使用static关键字,显然函数被调用之后,所有局部变量被销毁,结果就只会输出三个0。然而这里使用了static关键字,于是每次调用函数时,该变量就会保留函数前一次被调用的值。于是会输出012三个数字。注意:static $x=0;的作用仅仅是说明x是一个static变量并赋初值,而不会每次在调用函数时都把x变成0.

      

       4.echo和print语句

        作为前端工程师,实际上我们也总是会看到echo语句,并且还会有print语句。两者的具体作用是什么?又有什么区别呢?

    • echo可以输出一个或多个字符串或变量(变量可以直接放在字符串中,如果单独输出字符变量,不需要引号),且echo输出的速度比print快。echo是一个语言结构,使用的时候可以不加括号,也可以加上括号:echo 后echo()。比如:
      <?php
      $test="PHP";
      echo $test; echo("<h2> PHP is fun!</h2>"); echo "Hello world !<br>"; echo "I am interested in $test<br>"; echo "My","name","is","zzw"; ?>

        前面三句为使用echo输出一个字符串,而最后一句为使用echo输出多个字符串0。另外注意到使用echo输出的字符串中可以有HTML标签。

    • print同样也是一个语言结构,可以试用括号,也可以不使用括号:print或print()。但是print只允许输出一个字符串或者一个变量,其输出速度较echo慢,且echo没有返回值,而print的返回值为1。举例如下:
      <?php
         $test ="php";
          print $test;
          print "i love $test";
      ?>
      

        

       5.PHP中的数据类型

       PHP的数据类型有Sting、Integer、Float、Boolean、Array、Object、NULL,下面逐一介绍。

    • string(字符串)--字符串即为一串字符的序列,如“Hello world”。我们可以将字符串放在单引号或者是双引号中(这一点和JavaScript是一样的)。
    • Integer(整型)--即没有小数的数字,可以是整数也可以是负数。注意:在PHP中var_dump()函数返回变量的数据类型和值,PHP中竟然用到了和JavaScript中的var,尽管作用不一样...举例如下:
      <?php
          $x=628;
          var_dump($x);
          echo("<br>");
          $x=-345;
          var_dump($x);
          echo("<br>");
      ?>
      

      输出结果为:

      int(628)
      int(-345)
      

        

    • Float(浮点)--浮点数即带有小数部分的数字,或者是指数形式。如:
      <?php
          $x=6.28;
          var_dump($x);
      ?>
      

      会输出:float(6.28)。

    • Boolean(布尔型)--布尔型可以是true或者是false。如$x=true;或者$y=false;布尔型通常用于条件判断。
    • Array(数组)--数组可以在一个变量中存储多个值。例子如下:
      <?php
          $cars=array("Volvo","BMW","Toyota");
          var_dump($cars);
      ?>
      

      我们注意到:这是这个数组变量需要使用array()才能生效。结果会返回:array(3){[0]=>string(5) "Volvo" [1]=>string(3) "BMW" [2]=>string(6) "Toyota"}。结果中array(3)表示数组的长度为3, 【0】【1】【2】表示第一项、第二项、第三项。 string()表示每一项的长度。

    • Object(对象)--在PHP中,对象必须声明,即首先使用class关键字声明类对象。类可以是包含属性和方法的结构。即现在类中定义数据类型,之后会在实例化的类中使用数据类型。

       举例如下:

    <?php
    class Car
    {
       var $color;
       function Car($color="green"){
            $this->color=$color;
       }
        function what_color(){
            return $this->color;
        }
    }
    ?>
    

      其中和js类似,关键字this就是指向当前对象实例的指针,不指向任何其他对象或类。

         NULL(空值)--表示 没有值,我们也可以通过设置变量值为NULL来清空变量数据。

      6.PHP中的常量

      常量一经定义,在脚本的其他任何地方都不能被改变,且常量可以在整个脚本中使用(全局变量)。

          其定义举例如下:

    define("GREET","hello world",false);
    

      其中第一个参数是必选的,规定了常量名称。第二个参数时必选的,规定了常量的值。第三个参数时可选的,若为true,则常量的大小写不敏感,false为大小写敏感。若省略不屑,默认是敏感的。如:

    <?php
    define("GREET", "hello world",false);
    echo GREETING;    // 输出 "hello world"
    echo '<br>';
    echo greet;   // 输出 "greet",因为前面设置了大小写敏感。
    ?>
    

      

        7.PHP中的字符串变量

      (1)在PHP中,针对于字符串定义的运算符只有一个--并置运算符(.)。作用是把两个字符串的值连起来。如下所示:

    <?php 
        $text1="zzw";
        $text2="you are handsome";
        $text=$text1." ".$text2;
        echo $text;
    ?>
    

      上述代码,通过并置运算符.将text1和有一个空格的字符串""和text2链接起来了。输出结果为: "zzw you are handsome"。

           (2)strlen()函数接受一个字符串作为参数,可以返回一个字符串的长度。如echo strlen("zzw");则输出结果为3。

            (3)strpos()函数接收两个参数,第一个是一个字符串,第二个是希望查找在第一个中的位置的字符串。如:echo strpos("zzw","w");此代码返回的是2。因为字符串中第一个字符的位置是0而不是1。

        8.PHP中的运算符

    • 算数运算符:+(加)  —(减)  *(乘)  /(除)  %(模)  -(取反,例:-2) .(并置)
    • 赋值运算符:=(将右边的值赋给左边) +=(与Js同)  —=  *=  /=  %=  .=   
    • 递增/递减运算符: ++ —— (这个和JavaScript以及C++中的用法相同)。
    • 比较运算符:==(等于) ===(恒等于) !=(不等于)  <>(不等于,这个符号之前没见多..) !== (不等于) >(大于) <(小于)  >=(大于等于)  <=(小于等于)
    • 三元运算符: (expr1)?(expr2):(expr3)  即对expr1求值为true是,值为expr2,否则值为expr3。
    • 数组运算符:+(集合) ==(相等)  !=(不相等) <>(不相等)  !==(不恒等)
    • 逻辑运算符
      • and  (与)   例如 (6<10 and 12>10)则返回true
      • or (或) 例如(6==5 or 6==6) 则返回true
      • xor(有且仅有一个为true) 如(6==6 xor  3==3 )则返回false
      • &&(与)和and用法同
      • ||(或)   至少有一个为true则返回true  例如(3==2 || 5==5)则返回true
      • !(非)  如!(3==5)返回true

       

            9.if else语句和swith语句和JavaScript完全相同,这里不再累赘。

       10.PHP中的数组。

          之前其实我们已经使用了,这里再接受一下。即:array()。再PHP中主要有三种类型的数组:

    • 数值数组--即带有数字ID的数组
    • 关联数组--带有指定的键的数组
    • 多维数组--包含一个或多个数组的数组

      首先谈谈数值数组,一般有有两种方法来创建数值数组

      法一: 自动分配ID键(注意:ID键总是从0开始

    $cars=array("Volvo","BMW","Toyota");
    

      

      法二:人工分配ID键,如下所示:

    $cars[0]="Volvo";
    $cars[1]="BMW";
    $cars[2]="Toyota";
    

      另外,PHP提供了一个统计数组长度的函数,count();以数组错位参数即可,如:统计cars数组的长度:

    echo count($cars);
    

      输出结果为3。

      其次说明关联数组。同样有两种创建关联数组的方法。(注意:关联数组即ID键名为字符串而不是数字了)

      法一:

    $age=array("zzw"=>"20","htt"=>"18");
    

      法二:

    $age["zzw"]="20";
    $age["htt"]="18";
    

      我们可以看出,法二可能更符合我们使用的习惯。

      关联数组不谈了,作为前端工程师,对此不细究~

      

      11.PHP数组的排序

    • sort()--对数值数组进行升序排序
    • rsort()--对数值数组进行降序排序  (注意:r在英语中是“反”的意思
    • asort()--根据关联数组的值,对数组进行升序排列
    • arsort()--根据关联数组的值,对数组进行降序排列
    • ksort()--根据关联数组的键,对数组进行升序排列(注意:key为键的意思)
    • krsort()--根据关联数组的键,对数组进行降序排列

      12.超级全局变量

      在PHP中,我们之前介绍过说一个函数不能直接访问全局变量,必须在函数内部使用global来声明这个变量,才能被函数调用,实际上,还有其他一些诸如此类的变量,为区分全局变量,我们称之为超级全局变量。如$GLOBALS $_SERVER $_REQUEST $_POST $_GET $_FILES $_ENV $_COOKIE $_SESSION。

      之前介绍过了global,因此下面着重介绍$_SERVER  $_REQUEST   $_POST  $_GET

      1.$_SERVER

        从名字可以知道server为服务器,且$_SERVER是一个包含了诸如头信息(header)、路径(path)以及脚本位置(script locationis)等信息的关联数组。即 $_SERVER是一个由Web服务器创建的包含头信息、路径等等的关联数组

      下面列出这个关联数组中的重要元素:

    • $_SERVER['PHP_SELF']  即当前执行脚本的文件名。如http://example.com/test.php/foo.bar 的脚本中可得到/test.php/foo.bar
    • $_SERVER['SERVER_ADDR'] 即得到运行PHP脚本所在的服务器的IP地址。
    • $_SERVER['SERVER_NAME'] 即得到运行PHP脚本所在服务其的主机名
    • $_SERVER['SERVER_SOFTWARE']  即的到服务其标识字符串,如Apache/2.2.24
    • $_SERVER["SERVER_PROTOCOL"] 即得到通信协议的名称版本,如HTTP/1.0
    • $_SERVER['REQUEST_METHOD']  即得到访问页面使用的请求方法,如"GET"等
    • $_SERVER['HTTP_REFERER'] 即引导用户代理到当前页的前一页的地址
    • $_SERVER['REMOTE_ADDR']  即得到浏览当前页面的用户IP地址(remote即远程)
    • $_SERVER['REMOTE_PORT'] 即得到用户机器上链接到服务其所使用的端口号
    • $_SERVER['SCRIPT_URI'] 即URI来指定要访问的页面。例如"/index.html"

        更多点击这里

      

      2.$_REQUEST

      这个超级全局变量 用于通过接收如input的name值来接收HTML表单提交的数据(即value)。举例如下:

       如在一个HTML中的input(比如将其所在表单发送到example.php中)如下:

    <input type="text" name="sex" value="man">
    

      这里我们默认value是man,实际上value应当由用户输入,这里我做了简化,而example.php中的代码如下:

    <?php
        $user_sex=$_REQUEST["sex"];
        echo $user_sex;
    ?>
    

      即在php代码中,我们先使用$_REQUEST这个超级全局变量获得name=sex的值(即man)存到$user_sex这个变量中,然后输出。

      

      3.$_POST

      和$_REQUEST十分类似,只是$_POST的使用情况是在表单声明了method="post"的情况下,同过$POST来用$_REQUEST相同的方法来收集数据,这里不再举例。

      

      4.$_GET

      同样的,此方法类似上面两种方法,需要在form标签中指定该属性method="get",当然,根据get的特点,get也可以收集URL中发送的数据。对于form,方法和上面的request类似,不再举例。对于url的数据,举例如下,假定我们有一个包含参数的超链接的HTML页面如下:

    <html>
    <body>
    <a href="test.php?subject=PHP&web=baidu.com">$_GET测试</a>
    </body>
    </html>
    

      于是,当我们点击了之后,就会向php文件发送这个参数,在PHP文件中我们可以这样接收:

    <?php
        echo "project".$_GET("subject")."at".$_GET("web");
    ?>
    

      于是,我们就可以得到输入的文件:"projectPHPatbaidu.com"

      13.while循环 do while循环 for循环的语法规则和JavaScript是相同的,这里不再累赘。

        这里主要介绍一下foreach循环--该循环主要用于遍历数组

          语法(英文为syntax):

         

    foreach($array as $value)
    {
      //要执行的代码;
    }
    

        注意:中间的是as 其中$array是一个数组,没进行一次循环,当前数组元素的值就会被赋值给$value变量(指针会注意的移动)。即第一次循环$value的值是数组中的第一个值,第二次循环$value的值是数组的第二个值,直到将这个数组被循环结束。  

       

       14.PHP中的函数

         PHP是世界上最好的语言,恐怕与它的函数不无关系吧!因为PHP的真正威力源自于它的函数,在PHP中,提供了超过1000个内建的函数。

       (1)创建PHP函数--语法如下:

    function functionName()
    {
     //要执行的代码;
    }
    

          注意:函数的名称应该提示出它的功能,且函数名称应该以字母或下划线开头(不能以数字开头)。 

        PHP函数的执行和JavaScript及C++都是类似的--通过调用来执行。

             (2)添加参数

          和JS与C++一样,直接在函数名称后面的括号里即可添加参数,参数即为一个局部变量。

        (3)返回值

          类似的,如需让函数返回一个值,使用return语句即可实现。

          举例如下:

    <?php
         function addFun($x,$y)
    {
        $total=$x+$y;
        return $total;
    }
        $TOTAL=addFun(90,10);
        echo "90+10的和为:".$TOTAL;   
    ?>
    

        

        15.PHP中的魔术变量

          PHP向它运行的任何脚本提供了大量的预定义常量。只是很多常量是由不同的扩展库定义的,只有在加载了这些扩展库是才会出现。下面会介绍8个魔术变量--它们的值会随着它们在代码中的位置改变而改变。

       (1)_LINE_  

        该变量的值依赖于它在脚本中所处的行来决定。且这些特殊而常量不区分大小写.如:

    <?php
        echo '这是第"'._LINE_'"行';
    ?>
    

        上述实例输出这是第”2“行

       

               (2)_FILE_

          该变量会输出文件的完整路径(新版本PHP返回绝对路径)和文件名。如果用在被包含文件中,则返回被包含的文件名。如:

    <?php
    echo '该文件位于 " '  . __FILE__ . ' " ';
    ?>
    

      输出:"C:wampwwwexampleindex.php"

        

         (3) _DIR_

        该变量会返回文件所在的目录。如果用在被包含文件中,则返回被包括的文件所在目录。

         (4)_FUNCTION_

        该变量会返回函数名称(函数被定义时的名字)。如:

    <?php
         function addFunc()
     
    ?>
    

               (5)_CLASS_

        返回的是该类被定义时的名字(区分大小写)。

         (6)_TRAIT_

        trait名包括其被声明的作用区域(例如FooBar).

          (7)_METHOD_

        类的方法名,返回该方法被定义时的名字(区分大小写)。

          

    <?php
    function test() {
        echo  '函数名为:' . __METHOD__ ;
    }
    test();
    ?>
    

        结果输出:函数名为:test。

          (8)_NAMESPACE_

        当前命名空间的名称。(注意:命名空间这个概念在JavaScript中是没有的。

        16.PHP中的命名空间

      注意:命名空间在JavaScript中是没有这个概念的,在C++中有这个概念。实际上,命名空间有着相当重要的意义。它可以解决以下两类问题:

    • 用户编写的代码与PHP内部的类、函数、常量或第三方类、函数、常量之间的冲突。
    • 为很长的标识符名称创建一个别名,提高源代码的可读性。

      

      (1)定义命名空间

      我们可以通过关键字namespace来声明。如果一个文件中包含命名空间,它必须在其他所有的代码之前声明命名空间。如:

    <?php
        namespace mySpace;
        //其他代码必须放在声明命名空间的语句之下。
    
    
    ?>
    

      注意:也可以定义多个不同的命名空间,如:

    <?php
        namespace mySpace1;
        //mySpace1 这个命名空间下的代码
    
    
        namespace mySpace2;
        //mySpace2 这个命名空间下的代码
        
    
        namespace mySpace3;
        //mySpace3 这个命名空间下的代码
    
    
    ?>
    

        注意:在命名空间之前唯一合法的代码是用于定义源文件代码编码方式的declare语句。如declare(encoding="UTF-8");

       (2)定义子命名空间

        PHP命名空间也允许指定层次化的命名空间的名称。如namespace mySpaceSub

    Level

       (3)命名空间的使用

        这一部分内容很多,可以看这里...

         

        17.PHP面向对象

      (1) 在面向对象的程序设计(Object-oriented programming,缩写为OOP)中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象。

      在现实世界中,我们所面对的事情都是对象,如电脑,杯子,灯泡等。

      对象的三个主要的特性:

    1. 对象的形态:如颜色、大写、外形等等。
    2. 对象的行为:如跑、跳、开门等等。
    3. 对象的表示:相当于身份证。具体区分在相同的行为与状态下有什么不同。

       (2)面向对象的内容

          实际上,PHP和C++关于类这方面是很相似的。主要内容有:

    • 类-定义了一件事物的抽象特点
    • 对象-是类的实例
    • 成员变量-定义在类内部的变量,该变量的值对外是不可见的,类被初始化成对象后,该变量为对象的属性。
    • 成员函数-定义在类内部的可以访问对象的数据的函数
    • 继承-是子类自动共享父类数据结构的方法和机制。在js中是通过原型链继承的
    • 父类-可以被其他类继承,又称为基类或者超类。
    • 子类-一个类继承其他类称为子类,也可以称为派生类。
    • 多态-如不同的对象,接受到同一个消息可以产生不同的结果,这种现象称为多态性。
    • 重载-在js中没有重载,而php中有。重载即为函数或者方法有同样的名称,但是参数列表不相同的情况。
    • 抽象性-抽象性即为将具有一致的数据结构和行为的对象抽象成类。一个类就是这样一个抽象。
    • 封装-即将现实世界中存在的某个客体的属性和行为绑定在一起,并放置在一个逻辑单元内。
    • 构造函数-js中同样有构造函数,用来在创建对象时初始化对象。
    • 析构函数-C++中也有,js没有,它与构造函数相反,当对象结束其声明周期时(例如对对象所在的函数已经调用完毕),系统自动执行析构函数。它往往用来做“清理善后”的工作。比如在建立对象时用new开辟了一篇内存空间,应该在退出前在析构函数中使用delete释放。

      (3)创建对象

      如$merceds = new Car();  $bmw = new Car(),这样就通过Car类创建了三个对象。

      (4)PHP中类的定义

      

    <?php
    class phpClass {
      var $var1;
      var $var2 = "constant string";
      
      function myfunc ($arg1, $arg2) {
         [..]
      }
      [..]
    }
    ?>
    

      这里需要注意:

    • 类使用class关键词,并在其后加上类的名称
    • 类名之后使用大括号来定义类的变量和方法
    • 类的变量使用var来声明,变量也可以初始化值。与js同,用var,都是弱类型语言。

      在PHP中,也有this,假设我们已经定义了一个类,并且基于类实例化了对象,那么我们就可以通过对象调用成员方法了。如下所示:

    $baidu->setTitle("百度一下");
    $baidu->setUrl("baidu.com");
    $baidu->getTitleAndUrl();
    

      注意到,在php中调用方法时使用的时->而没有使用js中的.是因为php中.是并置运算符用于将字符串连接的,所以使用->来调用方法。

      

      (5)继承:通过extends关键字来继承一个类,如:

    class Child extends Parent{
    }
    

        (6)方法重写:如果从父类继承的方法不能满足子类的要求,那么可以对其进行改写,这个过程实际上叫做方法的覆盖(override),也成为方法的重写。

        

            (7)访问控制:这个和C++相似,即在属性或者方法的前面添加关键字public(公有)、 protected(受保护)、 private(私有)来实现。

    • 公有的类成员可以在任何地方被访问
    • 受保护的类成员可以被其自身及其子类和父类访问
    • 私有的成员只能被其定义所在的类访问。

       (8)接口:通过接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。接口是通过interface关键字来定义的,就像是定义一个标准的类一样,但是其中定义的所有方法都是空的。并且接口中定义的方法都必须是共有的,这是接口的特性。要实现一个接口,必须使用implements操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。举例如下:

        

    <?php
    // 声明一个"iTemplate“接口
    interface iTemplate
    {
        public function setVariable($name,$var);
        public function getHtml($template); 
    }
    
    //实现接口
    class Template implements iTemplate
    {
       private vars = array();
       public function setVariable ($name,$var)
       {
          $this->vars[$name]=$var;    
       }
       public function getHtml($template)
       {
          foreach($this->vars as $name->$value){
             $template = str_replace('{' . $name . '}', $value, $template);
          }
           return $template;
       }
    }
    ?>
    

       (9)常量,可以把类中始终不变的量定义为常量,不需要使用$符号。

               常量的值必须是一个定值。如:const constant="8";

           (10)抽象类 、调用父类构造函数。。。

    第三部分:表单

       实际上,对于PHP,我最希望的就是学习表单这一部分了,这一部分,对于前端工程师而言,我相信是必须掌握的,这样才能和后端顺利的交流,协调工作。

      一、表单和用户输入

       1. 对于一个表单(html),当被发送时,PHP能把来自HTML页面的表单元素自动变成可供PHP脚本使用。

      如下面的html代码:

    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <form action="welcome.php" method="post">
    名字: <input type="text" name="fname">
    年龄: <input type="text" name="age">
    <input type="submit" value="提交">
    </form>
    
    </body>
    </html>
    

      当用户填完上面的表单并点击提交按钮之后,表单的数据就会被送往名为welcome.php文件,welcome.php文件通过下面的语句就可以对该表单进行相应的操作:

    欢迎<?php echo $_POST("fname"); ?>!<br>
    你的年龄是<?php echo $_POST["age"];?>岁
    

        

      二.表单验证

        客户端?or 服务器?

        实际上表单验证应该通过客户端脚本(js)进行验证,因为浏览器验证速度更快,并且可以减轻服务器额负载。

        但是当验证用户输入需要插入数据库,这是就应该考虑使用服务器验证。在服务器验证的一种好的方式是:把表单传过去而不是传一个页面,这样用户就可以在同一张表单页面上得到错误信息,用户也就更容易发现错误了。

        这里我们当然只介绍服务器验证即PHP表单验证---because为了防止黑客,并且为了防止垃圾信息

        

    比如下面的这样一个PHP表单验证,名字必须只能包含字母和空格。E-mail必须包含@ 和. 。网址必须是一个有效的URL,性别必须选择一个,这是怎么做到的呢?

          先让我们看看html代码:

    “名字”: <input type="text" name="name">
    E-mail: <input type="text" name="email">
    网址: <input type="text" name="website">
    备注: <textarea name="comment" rows="5" cols="40"></textarea>
    性别:
    <input type="radio" name="gender" value="female">女
    <input type="radio" name="gender" value="male">男
    

      

      另外还必须有一个HTML表单代码如下:

    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    

      其中,我们使用了method="post";方法来提交数据。刚刚介绍过 $_SERVER是一个超级全局变量,会返回正在执行脚本的文件名。因此$_SERVER["PHP_SELF"]会发送表单数据到当前页面,而不是跳转到不同的页面。而htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。预定义的字符是:&、”、‘、<、>。而通过htmlspecialchars()函数可以避免被黑客攻击。  因为任何js代码可以添加在<script>标签中!黑客可以通过这一点来重定向页面到另一台服务器。

       当用户提交表单时,我们可以做:

    • 使用PHP trim()函数去除用户输入数据中不必要的字符
    • 使用PHP stripslashed()函数去除用户输入数据中的反斜杠。

       知道了这些后,接下来我们可以将这些过滤的函数写在一个我们自己定义的函数中,这样可以大大提高代码的复用性。将函数命名为test_input().

      现在,我们可以通过test_input()函数来检测$_POST中的所有变量。脚本代码如下所示:

    <?php
    //定义变量并且默认设置位空值
    $name=$email=$gender=$comment=$website="";//这种是连续赋值的方式
    
    if($_SERVER["REQUEST_METHOD"]=="POST") //关键REQUEST_METHOD包括POST 和 GET
    {
        $name=test_input($_POST["name"]); 
    // $_POST("name")得到的是name属性值为name的表单的value,以下同理 $email=test_input($_POST["email"]); $website=test_input($_POST["website"]); $gender=test_input($_POST["gender"]); } function test_input($data) { $data=trim($data);//把多余的空格去掉 $data=stripslashed($data);//把其中不应该出现的反斜杠去掉 $data=hmtlspecialchars($data);//实体化html代码 return $data;//返回这个新的被修改过的数据 } ?>

     

       三、表单中的必需字段

      如何使得一个字段为必需字段呢?我们可以试用php中的empty()函数,如果为空,则显示对应的错误信息,如果不为空,则将数据传递给test_input()函数。

      下面是一段用于处理是否为空的PHP代码:

    <?php
    // 定义变量并默认设为空值
    $nameErr = $emailErr = $genderErr = $websiteErr = "";
    $name = $email = $gender = $comment = $website = "";
    
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      if (empty($_POST["name"])) {  //注意:empty函数可以验证是否为空值
        $nameErr = "名字是必需的。";
      } else {
        $name = test_input($_POST["name"]);
     //如果不是空值,则将$_POST["name"]传给test_input(),防止不能正常处理或遭受黑客攻击
      }
    
      if (empty($_POST["email"])) {
        $emailErr = "邮箱是必需的。";
      } else {
        $email = test_input($_POST["email"]);
      }
    
      if (empty($_POST["website"])) {
        $website = "";
      } else {
        $website = test_input($_POST["website"]);
      }
    
      if (empty($_POST["comment"])) {
        $comment = "";
      } else {
        $comment = test_input($_POST["comment"]);
      }
    
      if (empty($_POST["gender"])) {
        $genderErr = "性别是必需的。";
      } else {
        $gender = test_input($_POST["gender"]);
      }
    }
    ?>
    

        上面的代码中指出如果为空,则把一个字符串赋值给变量,那么怎么显示错误信息呢?

      实际上,我们可以为每个字段添加一些脚本,各个脚本会在信息输入错误是显示对应的错误信息。如下所示:

    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
       名字: <input type="text" name="name">
       <span class="error">* <?php echo $nameErr;?></span>
       <br><br>
       E-mail: <input type="text" name="email">
       <span class="error">* <?php echo $emailErr;?></span>
       <br><br>
       网址: <input type="text" name="website">
       <span class="error"><?php echo $websiteErr;?></span>
       <br><br>
       备注: <textarea name="comment" rows="5" cols="40"></textarea>
       <br><br>
       性别:
       <input type="radio" name="gender" value="female">女
       <input type="radio" name="gender" value="male">男
       <span class="error">* <?php echo $genderErr;?></span>
       <br><br>
       <input type="submit" name="submit" value="Submit"> 
    </form>
    

      

      四、php表单验证邮件和URL

      以下代码可以通过简单的方式来检测name字段是否包含字母和空格,如果name字段值不合法,将输出错误信息:

    $name = test_input($_POST["name"]);
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
      $nameErr = "只允许字母和空格"; 
    }
    

      其中preg_match()函数将会进行正则表达式匹配,语法如下;

    int preg_match(string $pattern ,string $subject)
    

      即在subject字符串中搜索与pattern给出的正则表达式相匹配的内容。

      同样的,下面的代码可以验证e-mail地址是否合法,如果不合法,将输出错误信息:

    $email = test_input($_POST["email"]);
    if (!preg_match("/([w-]+@[w-]+.[w-]+)/",$email)) {
      $emailErr = "非法邮箱格式"; 
    }
    

      

          验证url等不再举例,因为这里涉及到正则表达式,这里我还不是很清楚,后面会详细学习正则表达式。

      五、确保在表单中输入值

      在用户点击提交按钮后,为确保字段值输入正确,我们在HTML的input元素中插入PHP脚本,

    如下所示:

    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
       名字: <input type="text" name="name" value="<?php echo $name;?>">
       <span class="error">* <?php echo $nameErr;?></span>
       <br><br>
       E-mail: <input type="text" name="email" value="<?php echo $email;?>">
       <span class="error">* <?php echo $emailErr;?></span>
       <br><br>
       网址: <input type="text" name="website" value="<?php echo $website;?>">
       <span class="error"><?php echo $websiteErr;?></span>
       <br><br>
       备注: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
       <br><br>
       性别:
       <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?>  value="female">女
       <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?>  value="male">男
       <span class="error">* <?php echo $genderErr;?></span>
       <br><br>
       <input type="submit" name="submit" value="Submit"> 
    </form>
    

      

      六、$_GET变量

      这个变量用于收集来自method="get"的表单中的值。注意:从带有get方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送信息的量也有限制。如下面所示的html代码:

    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <form action="welcome.php" method="get">
    名字: <input type="text" name="fname">
    年龄: <input type="text" name="age">
    <input type="submit" value="提交">
    </form>
    
    </body>
    </html>
    

      这个代码在我们写页面时是经常可以看到的。但是之前我一直不知道当用户点击了“submit”按钮之后的情况。实际上,点击之后,发送到服务其的URL如下所示:

      http://www.runoob.com/welcome.php?fname=Runoob$amp;age=3

      

      

      自此,"welcom.php"文件就可以通过$_GET变量来收集表单数据了(注意:表单域的名称会自动成为#_GET数组的键

       注意:

    • 因为在使用method=“get”时,所有额变量名和值都会显示在URL中。所以在发送密码或者其他敏感信息时,不应该使用这个方法。   
    • 然而,也正因为变量显示在了URL中,所以可以在收藏夹中收藏该页面,因此,在某些情况下,还是很有用的。
    • HTTP GET方法不适合大型的变量值,因为它的值是不能超过2000个字符的。

      七.$_POST变量

        显然,它是用来收集来自method="post"的表单中的值的。注意:从带有POST方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),因此无法把页面加入书签,并且对发送信息的量也没有限制。(实际上,默认情况下,POST方法的发送信息的量最大值为8MB)

           下面是一个html代码,其中有method="post"的表单

    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <form action="welcome.php" method="post">
    名字: <input type="text" name="fname">
    年龄: <input type="text" name="age">
    <input type="submit" value="提交">
    </form>
    
    </body>
    </html>
    

      

      八.$_REQUEST变量

      这个变量包含了$_GET $_POST 和$_COOKIE的内容,所以它可以用来收集get方法和post方法发送的表单数据。

       当用户点击 "提交" 按钮时,URL 类似如下所示:

    http://www.runoob.com/welcome.php
    

        现在welcom.php文件可以通过$_POST变量来收集表单数据了(请注意,表单域的名称会自动成为 $_POST 数组中的键)。

  • 相关阅读:
    [图解数据结构] 线性表
    利用爬虫获取网上医院药品价格信息 (上)
    手把手教你写网络爬虫(1):网易云音乐歌单
    用python实现与小米网关通讯
    eclipse添加lombok无法启动
    mongodb数据出现undefined如何查询
    初探active mq
    base64和图片互转
    设置Linux下Mysql表名不区分大小写
    Windows下安装MySQL5.6绿色版
  • 原文地址:https://www.cnblogs.com/zhuzhenwei918/p/6106889.html
Copyright © 2011-2022 走看看