毕业设计 之 四 PHP语法学习笔记


作者:20135216
平台:windows10
软件:XAMPP,DreamWeaver
说明:该笔记是对网站编程语言的详细学习

一、PHP基础

0. 关于环境

  1. Apache

  2. PHP
  3. MySQL

1.关于_END标签

  1. 用途:类似于“”,用于多行输出
  2. 语法规则:
    • <<<_END……_END;
    • 注意:用于关闭标签的_END标签必须单独放在一行,这一行中不能添加其他内容(注释也不可以)
  3. 练习

2.关于局部变量

  1. 定义:在函数内创建的变量,默认情况下均为局部变量
  2. 特点:
    • 局部变量在函数返回调用处便被清空。同样地,函数外创建的变量对于函数来说只能被非函数的代码访问(要想被函数访问,可以作为参数传递进去)
  3. 举例

3.全局变量&静态变量

  1. 定义:所有的代码都能够访问的变量为全局变量;只能在函数内部、下此函数被调用的时候仍然保存着值得变量,称为静态变量
  2. 语法
    • 全局变量:global [变量名]
    • 静态变量:static [变量名]

4.PHP类型转换

  1. (array)转换成数组
  2. (object)转换成对象

二、PHP函数

1.执行顺序

  1. 以print(abs(5-8))为例。PHP从内而外执行,先计算5-8,得到-3,然后调用abs(-3)得到3,最后将3转换为字符串再输出
  2. 返回一个数组
    • 用途:从一个函数中得到多个值
    • 举例:

2.关于引用

  1. 引用即在变量前加上&,表示一组值可以被多个函数访问或者修改
  2. 5.3以后的PHP不再支持这样的引用。出于替代,可以在函数内声明全局变量,便于让函数访问内部变量

3.包含和请求

  1. include “[.php文件名]”:载入该文件的所有内容
  2. 进阶版本是include_once “[.php文件名]”:保证一个.php文件只会被载入一次
  3. 进阶版+是require_once “[.php文件名]”:不仅有进阶版的效果,还会保证导入的是已经存在的文件

4.版本兼容

  1. 使用function_exits函数,可以检测预定义/自定义的函数是否有效
  2. 使用phpversion函数,查看代码正运行在哪个版本的PHP上

三、PHP对象

1.对象

  1. 在使用对象之前,必须使用class关键字定义一个类。类定义包含类名(大小写敏感)、属性以及方法。
  2. 举例

2.对象克隆

  1. 举例

    $object2 = clone $object1;
  2. 目的
    • 避免两个引用指向同一个对象。克隆出来的新实例与原来的实例完全一样

3.方法&静态方法

  1. 一般方法

     <?php
    class User
    {
    public $name,$password;
    function get_password()
    {
    return $this->password;
    }
    }
    ?>
  2. 静态方法

    • 静态方法不能访问任何对象属性,只能够被类调用(而不是被对象)

    • 示例

        <?php
      User::pwd_string();//::表示伴随静态方法的自调用
      class User
      {
      static function pwd_string()
      {
      echo "Please enter your password";
      }
      }
      ?>
  3. 作用域

    • public:也是变量默认的属性。
    • protected:这些属性及方法只能够被对象的类方法及其子类引用
    • private:这些成语只能够被同一个类中的方法引用,而非子类
  4. 补充

    • 类中的属性可以赋予默认值,这个默认值可以是一个数字或者字符串,但不能够是函数或者表达式

    • 类内可以定义常量

        <?php
      Translate::lookup();
      class Translate
      {
      const ENGLISH = 0;
      const SPANISH = 1;
      const FRENCH = 2;
      }
      static function lookup()
      {
      echo self::SPANISH;//self加上::可以直接引用常量
      }
      }
      ?>

4.继承

  1. extends操作符

    • 示例

    • 代码

        <?php
      $object = new Subscriber;
      $object->name = "Fred";
      $object->password = "pword";
      $object->phone = "012 345 678";
      $object->email = "fred@bloggs.com";
      $object->display();
      class User
      {
      public $name,$password;
      function save_user()
      {
      echo "Save User code goes here";
      }
      }
      class Subscriber extends User
      {
      public $phone,$email;
      function display()
      {
      echo "Name:" . $this->name . "<br>";
      echo "Pass:" . $this->password . "<br>";
      echo "Phone:" . $this->phone . "<br>";
      echo "Email:" . $this->email;
      }
      }
      ?>
  2. parent运算符

    • 目的:当子类与父类定义了相同名字的方法的时候,子类方法将覆盖父类方法。为了访问父类方法,则可以使用parent方法
    • 示例
  3. final方法

    • 用在父类的方法之前,用于防止子类覆盖父类方法

四、PHP数组

1.赋值

  1. 数组关键字

    • 用“下标=>值”的方法,将值赋给对应的下标(而不是变量)

    • 示例

        <?php
      $p1 = array("Copier","Inkjet","Laser","Photo");
      echo "p1 element:" . $p1[2] . "<br>";
      $p2 = array('copier' => "Copier & Multipurpose",
      'inkjet' => "Inkjet Printer",
      'laser' => "Laser Printer");//这里p1与p2是不同的数组
      echo "p2 element: ". $p2['inkjet'] . "<br>";
      ?>

  2. foreach...as循环

    • 示例

        <?php
      $paper = array('copier' => "Copier & Multipurpose",
      'inkjet' => "Inkjet Printer",
      'laser' => "Laser Printer");
      foreach($paper as $item -> $description)
      echo "$item:$description<br>";
      ?>
    • 说明

      • 当PHP遇到foreach语句时,读取数组中的第一个元素并放入as关键字后的变量中,每当控制流返回到foreach语句,下一个元素被放到as关键字中。在所有值都被使用之后,循环结束执行

2.函数

  1. is_array函数:检查变量是否为数组

  2. count函数:统计顶层元素数量。如果要知道一个多维数组到底有多少元素,可以使用count($fred,1)(后面那个参数只能是0或1)

  3. sort函数:在提供的源数组上直接进行排序,而不返回排序后的新数组。该函数排序成功返回true、排序失败返回false。

    • sort($fred,SORT_NUMERIC):强制按照数值排序
    • sort($fred,SORT_STRING):强制按照字符串排序
    • PS:resort函数按照相反顺序对源数组进行排序
  4. shuffle函数:按照随机顺序排序。也是直接在源数组上排序

  5. explode函数:接受一个由单个字符(或者字符串)分割成几个独立项构成的字符串,并将这些项放入一个数组。

    • 示例

        <?php
      $temp = explode(' ',"This is a sentence with seven words");
      print_r($temp);
      ?>

  6. compact函数

    • 作用:通过变量及其值来创建数组

    • compact函数需要将接收的变量名用引号引起,不是由$符号开头的变量。

    • 示例

        <?php
      $j = 23;
      $temp = "Hello";
      $address = "1 Old Street";
      $age = 61; print_r(compact(explode(' ','j temp address age')));
      ?>

  7. end与reset函数

    • end函数将PHP内部指针移动到数组的最后一个元素 ;rest函数将PHP内部指针移动到数组的第一个元素
    • 比如,echo reset($fred);打印fred数组的第一个元素

五、实用PHP技术

1.printf函数

  1. 转换字符

    • %b:二进制整数
    • %c:ASCII字符
    • %o:八进制整数
    • %x:十六进制(小写)数
  2. 精确度设置

     <?php
    echo "<pre>";//使得空格能显示
    printf("The result is $%15f\n",123.42/12);//将结果填充到15位
    printf("The result is $%015f\n",123.42/12);//使用0,将结果填充到15位
    printf("The result is $%15.2f\n",123.42/12);//将结果填充到15位,小数点之后精确2位
    printf("The result is $%'#15.2f\n",123.42/12);//将结果用#填充到15位,小数点之后精确2位
    ?>
    ![](http://i.imgur.com/wbkkRaN.png)
  3. 字符串填充

     <?php
    echo "<pre>";//使得空格能显示
    $h = 'Rasmus';
    printf("[%s]\n",$h);//标准格式输出
    printf("[%12s]\n",$h);//利用空格右对齐,输出长度为12
    printf("[%-12s]\n",$h);//利用空格左对齐
    $d = 'Rasmus Lerdorf';
    printf("[%12.8s]\n",$d);//右对齐,长度为12,截取8个字符
    printf("[%-12.12s]\n",$d);//左对齐,长度为12,截取12个字符
    printf("[%-'@12.10s]\n",$d);//左对齐,长度为12,用@填充
    ?>
    ![](http://i.imgur.com/R7PbWn4.png)
  4. 使用sprintf

    • 目的:将结果传递给变量而不是浏览器

    • 用法

      $hexstring = sprintf("%x%x%x",65,127,245);//以字符串形式返回RGB颜色组65,127,245的十六进制值,并将结果保存在$hexstring中

2.日期函数

  1. date函数

    • 目的:显示多种格式的日期数据

    • 格式

      date($format,$timestamp):第一个参数是一个字符串,指的是格式化标识符;第二个参数是一个Unix时间戳

    • 举例

        <?php
      echo date("l F jS , Y - H:ia",time());
      //l表示每周的日期全称
      //F表示月份
      //j表示每月的日期
      //S表示每月中日期的后缀
      //Y表示年份,四位数
      //H表示每天的小时,24小时制,有前导0
      //i表示分
      //a表示午前或午后
      //time()表示当前时间戳
      ?>

  2. checkdate函数

    • 目的:检查一个输入的日期是否有效
    • 用法:

3.文件函数

  1. 首先明确一点,因为编写PHP代码的时候并不知道所要应用的系统是否是大小写敏感的(比如,windows和Mac OS X系统大小写不敏感,而linux和Unix是大小写敏感的),因此要设定为大小写敏感,并将文件一律命名为小写

  2. 检测文件是否存在

    • 用法:

        if(file_exits("testfile.txt"))
      echo "File exits";
  3. 创建文件

    • 用法:

      • fopen函数参数'w'表示打开已存在文件或者创建新文件;但是打开已存在的文件会使得原有内容被删除
      • 这里我还发现了一个有意思的事情:当我不小心把_END的位置写在两个tab键之后的时候,程序会报错
  4. 从文件中读取数据

    • fgets:从文件中获取一整行数据

      • 举例:

    • fread:从文件中获取多行数据或者多行中的部分数据

      • 举例

        • 因为我这里用的是中文的“:”,而一个中文字符是4个二进制代码,所以如果只读取八个二进制码的话,引号解析不出来(就是乱码)。然后扩展到10个的话,就可以把“:”读取出来
  5. 复制文件

    • copy('[原文件]','[新文件]');
  6. 重命名文件或者目录

    • rename('[旧文件名]','[新文件名]');
  7. 删除文件

    • unlink('[原有文件]');
  8. 更新文件

    • 举例

        <?php
      $fh = fopen("exercise2.txt",'r+') or die("Failed to open file");
      $text = fgets($fh);
      fseek($fh,0,SEEK_END);
      fwrite($fh,$text) or die("Could not write to file"); fclose($fh);
      echo "File 'exercise2.txt' successfully update";
      ?>
    • 说明

      • fseek函数的第二个参数和第三个参数表示文件指针指向的具体位置。第三个参数位置有三种选择:

        • SEEK_END:移动到文件末尾
        • SEEK_CUR:将文件指针指向当前位置并在此基础上偏移给定的偏移量(向后移动)
        • SEEK_SET:将指针移动到第二个参数标识的位置
  9. 多用户访问时为文件加锁之flock函数

    • 目的:将所有用户的文件访问请求排成队列,直到程序释放了锁才解散队列
    • 注意:flock函数不为老版本的windows系统支持;此外,flock仅仅对其他调用它的进程上锁,如果修改代码在没有实现flock文件加锁的情况下进入文件并对其进行修改,此时代码所做的修改同样会覆盖处于锁定状态的进程所做的修改
    • 举例(对上段代码的改进)
  10. 读取整个文件

    • 函数:file_get_contents("[文件名]");

    • 补充:除了读取本地文件,还可以从internet服务器上取回一份文件,就像在浏览器张浏览该页面一样

    • 举例

        <?php
      echo file_get_contents("http://www.cnblogs.com/lwr-/p/6349948.html");
      ?>
      • 我的Dreamweaver中没有安装flash插件,所以图片没加载出来
  11. 提交文件

    • 代码示例:

        <?php
      echo <<<_END
      <html><head><title>PHP Form Upload</title></head><body>
      <form method = 'post' action = 'exercise2.php' enctype = 'multipart/form-data'>
      Select file:<input type = 'file' name = 'filename' size = '10'>
      <input type = 'submit' value = '上传'>
      </form>
      _END;
      if($_FILES)
      {
      $name = $_FILES['filename']['name'];
      move_uploaded_file($_FILES['filename']['tmp_name'],$name);
      echo "Uploaded image '$name'<br /><img src = '$name'>";
      }
      echo "</body></html>";
      ?>
    • 效果

    • 解析

      • form表单用POST提交数据,将数据提交的目标设定为exercise2.php,并告诉web浏览器用multipart/form data的MIME类型编码
      • 表单建立后,下一行输出提示内容“Select File:”,然后需要两个输入。第一个是用于输入文本的文本框,类型定义为file,文件名为filename(宽度为10个字符)。第二个被要求的输入只用于显示“上传”按钮
      • 上传的所有文件都被放入$_FILE中;一旦程序意识到有文件被上传,从上传文件的电脑中读取的实际文件名便会被检索出来,并存储到变量$name中。
      • move_uploaded_file函数将被上传的文件从临时存储文件位置转移到一个永久存储文件的目录中;将文件原先的名字传递给该函数,一并存储到当前目录中。
      • $_FILES数组有五个值
        • $_FILES['file']['name']:上传文件的名字
        • $_FILES['file']['type']:文件的类型
        • $_FILES['file']['size']:文件的大小
        • $_FILES['file']['tmp_name']:存储在服务器上临时文件的名字
        • $_FILES['file']['error']:上传文件导致的错误代码
    • 改进

      • 主要是防止用户的恶意输入,所以对上传文件的类型进行了限制和控制

      • 代码

          <?php
        echo <<<_END
        <html><head><title>PHP Form Upload</title></head><body>
        <form method = 'post' action = 'exercise2.php' enctype = 'multipart/form-data'>
        Select a JPG,GIF,PNG,TIF file:<input type = 'file' name = 'filename' size = '10'>
        <input type = 'submit' value = '上传'>
        </form>
        _END;
        if($_FILES)
        {
        $name = $_FILES['filename']['name'];
        switch($_FILES['filename']['type'])
        {
        case 'image/ipeg':$ext = 'jpg';break;
        case 'image/gif':$ext = 'gif';break;
        case 'image/png':$ext = 'png';break;
        case 'image/tiff':$ext = 'tif';break;
        default:$ext = '';break;
        }
        if($ext)
        {
        $n = "image.$ext";
        move_uploaded_file($_FILES['filename']['tmp_name'],$n);
        echo "Uploaded image '$name' as '$n':<br>";
        echo "<img src = '$n'>";
        }
        else
        echo "'$name' is not an accepted image file"; }
        else echo "No image has been uploaded";
        echo "</body></html>";
        ?>

参考

1.书籍

  1. 《PHP、MySQL与JavaScript学习手册(第4版)》Robin Nixon著,侯荣涛 侯硕楠 韩进 译

2.网址

  1. PHP date() 函数http://www.w3school.com.cn/php/func_date_date.asp
  2. PHP教程 http://www.w3school.com.cn/php/

毕业设计 之 五 PHP语法学习笔记的更多相关文章

  1. Golang 语法学习笔记

    Golang 语法学习笔记 包.变量和函数. 包 每个 Go 程序都是由包组成的. 程序运行的入口是包 main. 包名与导入路径的最后一个目录一致."math/rand" 包由 ...

  2. MarkDown语法 学习笔记 效果源码对照

    MarkDown基本语法学习笔记 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 下面将对Markdown的基本使用做一个介绍 目 ...

  3. 《C++Primer》第五版习题答案--第五章【学习笔记】

    <C++Primer>第五版习题答案--第五章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/15 第五章:语句 ...

  4. doy05循环语法学习笔记

    doy05循环语法学习笔记 一.while循环语法: 1.基本用法示例 x = 1 while x <= 5: print(x) x += 1 2.死循环:永远不结束的循环 如:while Tr ...

  5. mySql 基本语法学习笔记

     create database if not exists yang;    drop database if exists yang;     show databases;   show dat ...

  6. Java学习笔记(十五)——javadoc学习笔记和可能的注意细节

    [前面的话] 这次开发项目使用jenkins做持续集成,PMD检查代码,Junit做单元测试,还会自动发邮件通知编译情况,会将javadoc生成的文档自动发到一个专门的服务器上面,每个人都可以看,所以 ...

  7. Swift基本语法学习笔记

    Swift与OC的不同点 导入框架的方式 OC使用#import \<UIKit/UIKit.h> Swift使用import UIKit 定义标识符的方式 Swift中定义标识符,必须指 ...

  8. Mustache.js语法学习笔记

    原文地址:http://www.cnblogs.com/flypig88/archive/2012/05/14/2497780.html 看了Mustache的github,学学其中的语法,做个笔记 ...

  9. JavaWeb 后端 <五> 之 JSP 学习笔记

    一.JSP简介 1.也是SUN公司推出的开发动态web资源的技术,属于JavaEE技术之一.由于原理上是Servlet, 所以JSP/Servlet在一起. 二.HTML.Servlet和JSP 1. ...

随机推荐

  1. Web服务并发I/O模型

    I/O模型: 阻塞型.非阻塞型.复用型.信号驱动型.异步 同步/异步: 关注消息通知机制 消息通知: 同步:等待对方返回消息 异步:被调用者通过状态.通知或回调机制通知调用者被调用者的运行状态 阻塞/ ...

  2. macOS平台安装metasploit

    1  在Github上克隆Metasploit git clone https://github.com/rapid7/metasploit-framework.git /usr/local/shar ...

  3. Kali下Ettercap 使用教程+DNS欺骗攻击

    一.Ettercap 使用教程 EtterCap是一个基于ARP地址欺骗方式的网络嗅探工具.它具有动态连接嗅探.动态内容过滤和许多其他有趣的技巧.它支持对许多协议的主动和被动分析,并包含许多用于网络和 ...

  4. 12个HTML和CSS必须知道的重点难点问题

    这12个问题,基本上就是HTML和CSS基础中的重点个难点了,也是必须要弄清楚的基本问题,其中定位的绝对定位和相对定位到底相对什么定位?这个还是容易被忽视的,浮动也是一个大坑,有很多细节.这12个知识 ...

  5. [BZOJ 3829][POI2014] FarmCraft

    先贴一波题面... 3829: [Poi2014]FarmCraft Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 421  Solved: 197[ ...

  6. asp.net core中使用HttpClient实现Post和Get的同步异步方法

     准备工作 1.visual studio 2015 update3开发环境 2.net core 1.0.1 及以上版本  目录 1.HttpGet方法 2.HttpPost方法 3.使用示例 4. ...

  7. 【NOIP2017D2T3】列队

    Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵.Sylvia所在的方阵中有n × m名学生,方阵的行数为 n, ...

  8. Windows安装pip方法

    1.下载pip 地址:https://pypi.python.org/pypi/pip#downloads 注意选择tar.gz压缩包,目前最新版本为9.0.1,这里选择的版本是:pip-9.0.1. ...

  9. 牛客小白D题(STL的迭代器)

    「只要我拉动绳线,你就得随之起舞.」          ——泰兹瑞        泰兹瑞来到卡拉德许之后,由于他精湛的神器制造技术,可谓是过的如鱼得水.这次,他为自己打造了一个编辑器,称为威穆(Vei ...

  10. 莫比乌斯函数 51nod-1240(合数分解试除法)

    就是输出n时,莫比乌斯函数的值.直接将n唯一分解即可. 思路:筛出105以内的素数,因为109开方,105就差不多.当一个大数还没有被1000个素数分解,那么这个数基本上可以认为是素数(为合数为小概率 ...