中软Day14——模板引擎及PHP结构

中软Day14

模板引擎

数据+模板 ==> 静态页面的片段

为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。

模板引擎可以让将数据和HTML模板更加友好的结合,省去繁琐的字符串拼接,使代码更加易于维护。

为什么使用模板引擎

我们通过ajax获取到数据后,需要把数据渲染到页面,在学习模板引擎前,我们的做法是大量的拼接字符串,对于结构简单的页面,这么做还行

但是如果页面结构很复杂,使用拼串的话代码可阅读性非常的差,而且非常容易出错,后期代码维护也是相当的麻烦。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <div id="user">
    <p>姓名: xx</p>
    <p>年龄: xx</p>
    <p>性别: xx</p>
    <p>描述: xx</p>
  </div>
  <script>   
    // 找对象
    var user = document.getElementById("user");
 
    // 从后台通过 ajax 获取数据
    var obj = {
      name: "小王",
      age: 18,
      sex: "男",
      desc: "暴躁"
    }
    // 字符串拼接
    var htmlStr = " 

姓名: " + obj.name + "

"
+ "

年龄: " + obj.age + "

"
+ "

性别: " + obj.sex + "

"
+ "

描述: " + obj.desc + "

"
; user.innerHTML = htmlStr; // 缺点: // 1. html标签代码 和 js 代码混在一起, 代码冗余 // 2. 字符串拼接非常麻烦, 维护起来不方便 </script> </body> </html>

总结来说拼串渲染两大缺点:

  1. js中大量充斥着 html 结构拼串代码, 很冗余, 可读性差
  2. 字符串拼接很麻烦, 且维护起来也很麻烦, 容易出错
常见模板引擎

BaiduTemplate:http://tangram.baidu.com/BaiduTemplate/

velocity.js:https://github.com/shepherdwind/velocity.js/

ArtTemplate:https://github.com/aui/artTemplate

artTemplate是使用最广泛,效率最高的模板引擎,使用npm install art-template命令下载。

模板编译

通过调用模板引擎提供的template函数,告知模板引擎将特定模板和特定数据进行拼接,最终返回拼接结果。

// 模板引擎导入
const template = require('art-template');
// 模板编译
// 1.模板位置
// 2.向模板中传递要拼接的数据,对象类型,对象属性可以直接在模板中使用。
// result 拼接结果
const result = template('./views/index.html', {msg: 'Hello, art-template'});
模板语法
  
 <h2>{{value}}h2>
 <h2>{{a ? b : c}}h2>
 <h2>{{a + b}}h2>
 
  
 <h2><%= value %>h2>
 <h2><%= a ? b : c %>h2>
 <h2><%= a + b %>h2>
原文输出

如果数据中携带HTML标签,默认不会解析标签,会将其转义后输出。使用以下方式可以解析标签。

{{@ value }}
条件判断
 
 {{if 条件}} ... {{/if}}
 {{if v1}} ... {{else if v2}} ... {{/if}}
 
 <% if (value) { %> ... <% } %>
 <% if (v1) { %> ... <% } else if (v2) { %> ... <% } %>
{{if gender='男'}}
  
{{else}}
{{/if}}
数据循环
{{each target}}
     {{$index}} {{$value}}
 {{/each}}
  
 <% for(var i = 0; i < target.length; i++){ %>
     <%= i %> <%= target[i] %>
 <% } %>
each语法

{{each data v i}}
  • {{v.content}}

  • {{/each}}
    子模版

    使用子模板可以将网站公共区块(头部、底部)抽离到单独的文件中。

     
     {{include './header.art'}}
      
     <% include('./header.art') %>
    
    模板继承

    使用模板继承可以将网站HTML骨架抽离到单独的文件中,其他页面模板可以继承骨架文件。

    {{extend './layout.html'}}
    {{block 'head'}} ... {{/block}}
    

    计算机网络知识

    IP 地址
    域名 IP的别名
    DNS 地址簿
    端口 区分服务

    1.浏览器分析url(www.baidu.com)

    2.浏览器向DNS服务器 请求解析 url(www.baidu.com)

    3.DNS 把url 解析 成IP地址

    4.浏览器和主机建立TCP(运输层协议)

    5.浏览器发出http请求

    6.服务器发送http响应

    7.tcp链接释放

    8.浏览器解析文件 完成显示界面

    接受其他主机访问

    查看本机的IP地址 cmd–> ipconfig

    1. 找到配置文件
    2. Deny form all 改为 allow form al

    配置文件查找错误

    1.找到路径 D:\develop\wamp\bin\apache\Apache2.4.4\bin

    2.cmd 执行httpd

    3.更正错误

    4.重启服务

    常见的后端编程语言

    • php 相对简单 快速构造网站
    • JavaScript nodeJS
    • java jsp 处理高并发
    • .net 微软
    • python 蟒蛇

    PHP

    php 是一种后台编程语言 ,用于浏览器处理ajax请求的后端语言, 使用php可以开发动态网站和后台接口 (所谓接口就是url地址,用于给前端提供数据) 前后端分离 全栈

    单引号和双引号区别:单引号将内容解析成字符串,双引号将内容解析成变量。

    后端编写的代码都不能直接运行,要在服务器的环境下才能运行。

    ​ PHP是世界上最好的语言 ( 简单 )

    ​ html构造静态网站,php构造动态网站

    php基本结构

    
    

    PHP基本数据类型

    PHP中有8种变量类型:boolean,integer,float/double,string,array,object,resource和null;

    PHP中变量类型不是由程序设定,而是PHP根据程序运行上下文确定;

    $s="字符串类型";
    $i=100; //整数类型
    $f=3.15; //浮点数类型
    $lo=true; //逻辑类型
    $ar=array("数组","类型");
    $n=null; //null值,将变量值清空
    

    字符串操作

    1. 字符串连接运算符".", 用于把两个字符串值连接起来

      $str1 = 'My name is ';
      $str2 = 'wuhen';
      echo $str1.$str2;
      //结果为My name is wuhen 使用.连接2个字符串
      
    2. 获取字符串长度 strlen()

      $str3 = 'My name is wuhen';
      echo strlen($str3);
      //结果为16 返回$str4的长度
      
    3. 去掉字符串的首尾空格和特殊字符

      //去除空格和特殊字符
      $str4 = ' abcde ';
      echo strlen($str4);
      //结果为7 包含首尾的空格
      
      echo strlen(trim($str4));
      //结果为5 去除空格后的长度
      
      echo strlen(ltrim($str4));
      //结果为6 去除左边空格后的长度
      
      echo strlen(rtrim($str4));
      //结果为6 去除右边空格后的长度
      
      1. 大小写转换

        • strtoupper() 转为为大写,并返回一个新的字符串
        • strtolower() 转换为小写,并返回一个新的字符串
        • ucfirst() 整个字符串首字母大写,并返回一个新的字符串
        • ucwords() 每个字母大写,并返回一个新的字符串
        	//大小写转换
        	$str6 = 'my name is wuhen';
        	
        	//strtoupper()
        	$strupper = strtoupper($str6);
        	echo $strupper;
        	//结果为 MY NAME IS WUHEN 不改变原数组
        	
        	//strtolower()
        	$strlower = strtolower($strupper);
        	echo $strlower;
        	//结果为 my name is wuhen 
        	
        	//$ucfirst()
        	$strucf = ucfirst($str6);
        	echo $strucf;
        	//结果为 My name is wuhen 字符串首字母大写
        
        	//ucwords()
        	$strucw = ucwords($str6);
        	echo $strucw;
        	//结果为 My Name Is Wuhen 每个单词首字母大写
        
      2. substr() 字符串截取,从字符串指定索引位置截取指定长度的字符,返回截取的部分。

        //字符串截取
        $str7 = 'This is test';
        
        //截取2位
        echo substr($str7,5,2);
        //结果为 is
        
        //长度参数不写时,则会截取剩下全部字符,
        echo substr($str7,5);
        //结果为 is test
        
      3. strstr()字符串搜索截取 ,搜索一个字符串在另一个字符串中的第一次出现,返回字符串的剩余部分。

        //字符串搜索
        $str8 = 'This is a test';
        echo strstr($str8,'a');
        //结果为 a test
        //在字符串找到a,返回a位置以及后面的字符串
        
      4. strpos() 字符串查找 ,搜索一个字符串在另一个字符串中的第一次出现的位置,返回出现的位置。

        //字符串查找
        $str9 = 'This is a test';
        
        //返回查找目标第一个的索引,索引从0开始
        //没有设置起始位置参数,默认从开头开始查找
        echo strpos($str9,'s');
        //结果为 3
        
        //从指定位置开始查找
        echo strpos($str9,'s',10);
        //结果为 12
        
      5. str_replace()字符串替换,用一个字符串替换查找的字符串,并返回一个新的字符串。

        //字符串替换
        $str10 = 'This is a apple';
        
        $newstr =str_replace('apple','cat',$str10);
        
        echo $newstr;
        //结果为 This is a cat
        //在字符串中查找到apple并将其用cat替换,返回一个新的数组
        

    运算符

    • 算数运算符

      用来执行数学上的算数运算

      • 前置自增自减运算符,先运算再赋值
      • 后置自增自减运算符,先赋值再运算
      	//算数运算符
      	$a = 100;
      	$b = 50;
      	
      	echo $a+$b;//加法,结果为150
      	echo '
      '
      ; echo $a-$b;//减法,结果为50 echo '
      '
      ; echo $a*$b;//乘法,结果为5000 echo '
      '
      ; echo $a/$b;//除法,结果为2 echo '
      '
      ; //前置自增自减运算符 $var1 = ++$a;//先进行$a自加1,然后将结果赋值给$var1 echo $var1;//结果为101 echo '
      '
      ; echo $a;//结果为101 echo '
      '
      ; $var2 = --$a;//先进行$a自减1,然后将结果赋值给$var2 echo $var2;//结果为100 echo '
      '
      ; echo $a;//结果为100 echo '
      '
      ; //后置自增自减运算符 $var3 = $a++;//先将$a赋值给$var3,然后$a自加1 echo $var3;//结果为100 echo '
      '
      ; echo $a;//结果为101 echo '
      '
      ; $var4 = $a--;//先将$a赋值给$var4,然后$a自减1 echo $var4;//结果为101 echo '
      '
      ; echo $a;//结果为100 echo '
      '
      ;
    • 赋值运算符

      $x1=10;
      echo $x1; // 输出 10
      
      $y1=20;
      $y1 += 100;
      echo $y1; // 输出 120
      
      $z1=50;
      $z1 -= 25;
      echo $z1; // 输出 25
      
      $i1=5;
      $i1 *= 6;
      echo $i1; // 输出 30
      
      $j1=10;
      $j1 /= 5;
      echo $j1; // 输出 2
      
      $k1=15;
      $k1 %= 4;
      echo $k1; // 输出 3
      
    • 字符串运算符

      • 字符串和数字连接时,使用 . 优先转换成字符串
      • 字符串和数字连接时,使用 + 优先转换成数字
      $a = "Hello";
      $b = $a . " world!"; //串接字符
      echo $b; // 输出 Hello world!
      
      $x="Hello";
      $x .= " world!"; //串接赋值字符
      echo $x; // 输出 Hello world!
      
    • 类型运算符

      instance of 用于确定一个 PHP 变量是否属于某一类的实例。

      class Dog{
      }
      $dog1=new Dog();
      if($dog1 instanceof Dog){
          echo '$dog是Dog对象的实例';
      }else{
          echo '$dog不是Dog对象的实例';
      }
      
    • 执行运算符

      PHP 支持一个执行运算符:反引号(“), PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回。使用反引号运算符的效果与函数 shell_exec() 相同。

      echo '
      ';
      echo `netstat -anb`;
      
    • 比较运算符

      比较运算符用于对两个变量或者表达式进行比较

      • 如果比较一个整数和字符串,则字符串会被转换为整数
      • 如果比较两个数字字符串,则作为整数比较
      	//比较运算符
      	$a=10;
      	$b=5;
      	$c='5';
      	$d='3';
      	var_dump($a<$b);//结果为bool(false)
      	var_dump($a<=$b);//结果为bool(false)
      	var_dump($a>$b);//结果为bool(true)
      	var_dump($a>=$b);//结果为bool(true)
      	var_dump($a==$b);//结果为bool(false)
      	var_dump($b==$c);//结果为bool(true),==只判断数值是否相等
      	var_dump($b===$c);//结果为bool(false),===判断数值和类型
      	var_dump($d<$c);//结果为bool(true),会转成整型来比较
      
    • 逻辑运算符

      1. 与 &&
        两边的表达式都为真,结果为真;有一假,结果返回假

      2. 或 ||
        两边的表达式都为假,结果为假;有一真,结果返回真

      3. 非 !
        返回与表达式相反的结果

      4. and or
        和上述逻辑运算符功能相同

      5. 逻辑异或 xor
        两边的表达式一真一假 ,结果返回真,反之返回假

      	//逻辑运算符
      	$bool1 = true;
      	$bool2 = false;
      	
      	var_dump($bool1 && $bool2);//结果为bool(false)
      	var_dump($bool1 || $bool2);//结果为bool(true)
      	var_dump(!$bool1);//结果为bool(false)
      
      	var_dump(($bool1 && $bool2) and ($bool1 || $bool2));
      	//结果为bool(false)
      	
      	var_dump(($bool1 && $bool2) or ($bool1 || $bool2));
      	//结果为bool(true)
      	
      	var_dump($bool1 xor $bool2);
      	//结果为bool(true)
      
    • 错误控制运算符

      PHP 支持一个错误控制运算符:@。当将其放在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
      @ 一般可以和 die 配合使用,使致命错误不被忽略。

      
      
          $num1=12;
      
          $num2=$num1/0;//会输出警告信息
      
          $num3=@($num1/0);//不会输出任何信息
      
      ?>
      
    • 三元运算符

      
      
          $num1=12;
      
          echo $num1%2==0 ? '偶数' : '奇数';
      
      ?>
      
    • 其他运算符

      • =>  数组下标符号

      • ->  对象成员访问符号

    PHP注释

    • 单行注释,注释内容中不可出现?

      //php     #php
      
    • 多行注释

      /*php*/
      

    PHP变量

    在php 中 变量必须以$开头 字母/数字/下划线 不能以数字开头 区分大小写

    $a=1;
    $b=2; //php与其他强类型语言不同,不需要在创建变量的时候为变量赋予固定的数据类型,php可以根据赋予给变量的值而自动确定其数据类型
    $c=$a+$b; //php的变量同样与其他语言不同,只要这个量依然是变量,$符号就不能省略,否则会报错
    echo $c;
    
    $x=5;
    $y=10;
    function myTest(){
    $y=10; //局部作用域
    echo "

    测试函数内部的变量:

    "
    ; echo "变量x是:$x"; //编译报错,因为在php中全局变量因为不是在函数内部声明,所以不能用在函数内部,但是可以定义相同的变量 echo "
    "
    ; echo "变量y是:$y"; } myTest(); echo "

    测试函数之外的变量:

    "
    ; echo "变量x是:$x"; echo "
    "
    ; echo "

    变量y是:$y

    "
    ; //编译报错,函数内部声明的变量同样不能用在函数外 function myTestTwo(){ global $x,$y; //global用于在函数内部访问全局变量,也就是让全局变量变得正在全局! $y=$x+$y; //global在$GLOBALS[index]中存储了所有的全部变量,下标存有变量名,可以用来在函数内更新全局变量 } myTestTwo(); echo "

    $y

    "
    ; function myTestThree(){ static $x=0; //类似于静态变量,通常当一个函数结束时,会释放掉所有变量的值,此时将不会产生累加效果 echo "

    $x

    "
    ; $x++; //但是,当我们加上static关键词之后,变量的值将不会释放,而会一直保存 } myTestThree(); //0 myTestThree(); //1 myTestThree(); //2
    • 变量作用域:
      1.全局(Global)作用域,在函数外声明的变量只能在函数外使用
      可使用global关键词在函数内访问全局变量
      2.局部(LOCAL)作用域,在函数内声明的变量,只能在函数内使用

      3.超全局作用域

    • 变量其他注意事项:
      1.变量会在首次为其赋值时被创建
      2.PHP 根据变量的值,自动把变量转换为正确的数据类型,无需声明
      3.当函数完成后会删除所有的变量,添加static关键字可使某个局部变量不被删除

    • 定义变量

      
      
          $name='i love php!';
      
          echo '$name';//输出$name
      
          echo "$name";//输出i love php!
      
         
      
          echo "hello\nworld";//\n为转义字符
      
          echo 'hello\nword';//\n原样输出
      
         
      
          $number1=123;//定义十进制整数
      
          $number2=0123;//定义八进制整数
      
          $number3=0x123;//定义十六进制整数
      
          $number4=0.123;//定义浮点数
      
          $number5=2.3E+3;//$number5=2300
      
          $number6=2.3E-2;//$number6=0.023
      
         
      
          $array1=array('武汉','广州','南京');//定义一维数组
      
          $array2=array(0=>'php',1=>'c#',2=>'java');//定义一维数组
      
          echo '

      ';//段楼开始标记 echo $array1[1];//输出广州 echo '
      '
      ;//换行符 echo $array2[0];//输出php echo '

      '
      ;//段落结束标记 $num1='5.23r*r'; $num2=1; echo $num1+$num2;//输出6.23 ?>
    • 引用、静态变量及全局变量

      
      
          $str1="hello";
      
          $str2=$str1;//变量赋值
      
          $str2=& $str1;//引用赋值
      
          static $name='C#';//静态变量
      
         
      
          $score=80;
      
          function f(){
      
             $score=100;
      
             echo $score.'
      '
      ;//输出100 global $score;//定义全局变量 echo $score;//输出80 } f();//调用函数 ?>
    • 可变变量

      //函数名可以用其他变量代替  
      //注意:只有在调用时才能使用变量,定义时不允许!
      
      
          $name='wit';
      
          $wit='hello,word';
      
          echo $name.'
      '
      ;//输出wit echo $$name;//输出hello,word ?>

    命名规则

    常量名 类常量建议全大写,单词间用下划线分隔    // MIN_WIDTH  
    变量名建议用下划线方式分隔             	  // $var_name  
    函数名建议用驼峰命名法                   // varName  
    定界符建议全大写                       // <<

    声明常量

    1. unset() 中不能使用常量
    2. 常量前面没有美元符号($)
    3. 常量用 define() 函数定义,而不能通过赋值语句
    4. 常量也可以通过 const 来定义
    5. 常量的命名规范是“字母大写加下划线”,比如 TAX_RATE
    echo strlen("返回字符串的长度函数strlen");
    echo strpos("在一组字符中截取相应的片段","相应的片段");
    //其他操作通过手册查询
    
    • 定义常量,语法:

      define(string constant_name,mixed_value,case_sensitive=true);

      说明:第一个参数为常量名,第二个参数为常量值,第三个参数表示是否对大小写敏感(可选)。

    • 获取常量的值,语法:

      mixed constant(string const_name);

      也可以通过常量名直接获取常量的值.

    • 判断一个常量是否定义,语法:

      bool defined(string const_name);

      
      
          define("$PI", 3.1415926);
      
          if(defined("$PI"))
      
          {
      
             echo $PI."
      "
      ; echo constant("$PI"); } ?> //系统预定义的一些常量 echo constant("__FILE__");//输出PHP文件名 echo constant(_LINE_);//输出PHP程序行数 echo constant(PHP_VERSION);//PHP程序的版本 echo constant(PHP_OS);//P执行PHP解析器的操作系统名 ?>
    • 魔术常量

      中软Day14——模板引擎及PHP结构_第1张图片

    预定义变量

    不需要声明就可以使用的变量,又称超全局变量。

    $GLOBALS  
    $_COOKIE  
    $_ENV  
    $_FILES  
    $_GET  
    $_POST  
    $_REQUEST  
    $_SERVER  
    $_SESSION  
    
    • 综述

      • $_GET变量(数组)

        Get这个词,常常出现在

        这叫做“表单以get方式提交数据”

        则$_GET这个预定义数组变量,就是指以这种方式提交的所有数据的集合(数组)

        对应来说,也可以以post方式提交数据。

        实际上,在网页中,以get方式提交数据有多种形式:

        形式一:
        
             <form action=”abc.php” method=”get”>
        
              项目一:<inputtype=”text” name=”uName”>
        
              项目二:<inputtype=”password” name=”uPswd”>
        
            <inputtype=”submit” value=”提交”>
        
           </form>
        
        形式二:<a href=”abc.php?uName=test1&uPswd=123>文字。。。</a>
        
        形式三:
        
              <script>
        
                   Location.href=” abc.php?uName=test1&uPswd=123;// 利用location对象的href属性
        
              </script>
        
        形式四:
        
            <script>
        
                  Location.assign(“abc.php?uName=test1&uPswd=123”); // 利用location对象的方法assign()
        
             </script>
        
        不管是哪种形式的get提交过来的数据,获取数据是一样的。作用是:用户填写表单数据,并提交后,会将数据发送(提交)给页面abc.php,也可以理解为“打开”该网页。
        
        在abc.php网页中
        
        
        
              $v1=$_GET[‘uName’];   //单引号也可以用双引号,本质是一个字符串,其实是数组的键名(下标)
        
              $v2=$_GET[‘uPswd’];  //该键名必须跟提交的时候名字完全一致(区分大小写)
        
              echo ”v1=$v1,v2=$v2;
        
              echo<hr />;
        
             echo<pre>;
        
             var_dump($_GET);  //var_dump()用于输出一个变量最完整的信息,输出$_GET这个数组
        
             echo</pre>?>
        
      • $_POST变量(数组)

        类似于 G E T 变 量 ( 数 组 ) , _GET变量(数组), GET_POST代表页面通过post方式提交过来的数据所形成的数组。

        • post提交数据,通常只有一种形式:

          <form action=”abc.php” method=”post”>
          
                      项目一:
          
                      项目二:
          
                    
          
                 form>
          

          作用是:用户填写表单数据,并提交后,会将数据发送(提交)给页面abc.php,也可以理解为“打开”该网页。

        • 接受post数据的形式为(abc.php网页中):

          
          
                 $v1=$_POST[‘uName’];   //单引号也可以用双引号,本质是一个字符串,其实是数组的键名(下标)
          
                 $v2=$_POST[‘uPswd’];  //该键名必须跟提交的时候名字完全一致(区分大小写)
          
                 echo ”v1=$v1,v2=$v2;
          
                 echo<hr />;
          
                 echo<pre>;
          
                 var_dump($_POST); //var_dump()用于输出一个变量最完整的信息,输出$_GET这个数组
          
                 echo</pre>?>
          

          注:网页中的form表单,一般都用post方式,get方式主要体现在其他3中形式。

      • $_REQUEST变量(数组)

        R E Q U E S T 数 组 , 并 不 是 一 个 独 立 的 数 据 来 源 , 而 是 _REQUEST数组,并不是一个独立的数据来源,而是 REQUEST,_GET数据和 P O S T 数 据 的 “ 总 和 ” , 即 _POST数据的“总和”,即 POST_REQUEST数组中包括了所有 G E T 数 据 和 _GET数据和 GET_POST数据——由系统自动存储的。

        • 通常 G E T 数 据 和 _GET数据和 GET_POST数据不会“同时出现”,$_REQUEST数组就代表了其中之一。

          <form action=”abc.php” method=”post”>
          
                     项目一:
          
                     项目二:
          
                   <input type=”submit” value=”提交”>
          
               form>
          
               <form action=”abc.php” method=”get”>
          
                  项目一:
          
                   项目二:
          
                 <input type=”submit” value=”提交”>
          
              form>
          
              //两者接受数据都一样
          
          
          
        • 当get与post同时提交的情形(一般只有一种html语法形式会出现该情形)

          <form action=”abc.php?a=5&b=10”method=”post”>
          
          项目一:<inputtype=”text” name=”uName”>
          
          项目二:<inputtype=”password” name=”uPswd”>
          
          <input type=”submit” value=”提交”>
          
          </form>
          
            //此时,uName和uPswd两个数据以post方式提交给abc.php,并a=5与b=10以get方式提交给abc.php
          
          //则在页面中:
          
          //这样取得get数据:
          
          $v1=$_GET[‘a‘];  
          
          $v2=$_GET[‘b’];
          
          //这样取得post数据:
          
          $v1=$_POST[‘uName’]; 
          
          $v2=$_POST[‘uPswd’];
          
          //但也可以这样取
          
          $v1=$_REQUEST[‘a‘];  
          
          $v2=$_REQUEST[‘b’];
          
          $v3=$_REQUEST[‘uName’]; 
          
          $v4=$_REQUEST[‘uPswd’];
          
        • 当get数据和post数据同时提交并其中有重名的时:

          1. 尽量避免重名

          2. 如果重名了,此时$_REQUEST只会记录(存储)其中一个数据(要么post数据,要么get数据)

          3. 至于记录的是哪个,是由php.ini中的一个设置项决定

            • request_order=”GP”;//这是默认值,G代表GET,P代表POST
            • 含义是:先存储GET数据,再存储POST数据
            • 可见如果重名,此时POST就会覆盖GET数据
            • 改为:request_order=“PG”,顺序反过来
          项目一: 项目二: 项目三: <input type=”submit” value=”提交”> form> //a的数据为以post方式提交的数据。 //$_GET 、$_POST 、$_REQUEST三种数据是相互独立的
      • $_SERVER变量(数据)

        该变量存储了服务器端或客户端的一些请求信息或设置信息,比较多,而且不同的服务器和不同的请求页面,其数据项都可能不同。

        常用的有:

        REMOTE_ADDR,用户的IP地址

        SERVER_ADDR,服务器端的IP地址

        SERVER_NAME,服务器名(主机名)

        echo<table border=1>;
        
        foreach($_SERVER as $key=>$value){
        
          echo<tr>;
        
          echo<td>$key</td>;
        
        echo<td>$value</td>;
        
        echo</tr>;
        
        }
        
        echo</table>;
        
        
      • $GLOBALS变量(数据)

        似乎是一个多余的变量:它只是把我们定义的所有全局变量存储到该数组中:

        变量名就是该数组的下标(键名),变量值就是对应的值。

        
        $v1=1;
        $v2=2;
        function f1(){
        $v3=3;
        $v4=4;
        echo<br/>函数f1被调用!”;
        }
             f1();
                 echo<pre>GLOBALS数组内容为:<br />;
                   var_dump($GLOBALS);
                 echo</pre>;
        ?>
        //(全局变量v1,v2存入GLOBALS数组,而局部变量v3、v4没有存入GLOBALS数组)
        
        //显示: 
        
        //函数f1被调用!
        
        //GLOBALS数组内容为:
        
        array(7) {
        
          ["GLOBALS"]=>
        
          *RECURSION*
        
          ["_POST"]=>
        
          array(0) {
        
          }
        
          ["_GET"]=>
        
          array(0) {
        
          }
        
          ["_COOKIE"]=>
        
          array(0) {
        
          }
        
          ["_FILES"]=>
        
          array(0) {
        
          }
        
          ["v1"]=>
        
          int(1)
        
          ["v2"]=>
        
          int(2)
        
        }
        
    • 作用域问题

      PHP中,自定义的变量的作用域分两种:全局变量(函数外)、局部作用域(函数内)

      但预定义变量的作用域称为“超全局作用域”:全局作用域+局部作用域的总和(函数内外全都可用)

    • 数据类型问题:超全局变量都是数组

    PHP集合

    • 数组

      不能用数组和对象作为键(key),这样做会导致一个警告:illegal offsettype

      php 数组是可以自动增长的

      • 数组创建方式

        //第一种,对数组的每一个元素赋值:
        $arr[0]=1;
        $arr[1]='Hello World';
        //第二种:
        $arr=array('张三','李四','王五');
        //第三种:
        $arr=array('no1'=>'张三','no2'=>'李四','no3'=>'王五');
        
      • 数组的自动增长

        $arr=array();
        for($i=0; $i<20; $i++){
            $arr[]=$i;
        }
        var_dump($arr);
        
      • 数组的常用函数

      中软Day14——模板引擎及PHP结构_第2张图片

      • 删除数组或数组项

        $arr = array('a','b','c','d');
        unset($arr);  // 删除数组
        unset($arr[2]);  // 删除数组项
        
      • 数组遍历

        //var arr = [1,3,5];
        //arr[1];
        $arr = array(1,3,5);
        print_r($arr);
        echo "
        "
        ; echo $arr[1];//echo不能取出数组但可以取出数组中的元素 //数组遍历 for($i=0;i<count($arr);$i++){ echo $arr[$i]; echo "
        "
        ; }
      • 关联数组

        $age1=array("Peter"=>"35");
        //也可以
        $age2=array('peter')="35";
        
        echo "peter age is".$age1['Peter'];
        echo "peter age is".$age2['peter'];
        
        foreach ($age1 as $ag => $ag_value){
        echo "age=".$ag."value".$ag_value;
        }
        ?>
        
      • 数组的运算符

        $arr1 = array(1,6);
        $arr2 = array(2,8,9);
        $arr3 = $arr1 + $arr2;
        print_r($arr3);  // 1 6 9
        
      • 数组的空间分配机制

        函数名 作用
        memory_get_usage() 返回分配给 PHP 的内存量
      • 排序

        • 冒泡排序

          // 代码优化之后,速度有很大提升
          $arr = array(12,23,34,1,-12,26,56,234,237,9);
          function bubble(&$arr){
              $flag = 0;
              $arr_len=count($arr);
              for($i = 0; $i < $arr_len-1; $i++){
                  for($j = 0; $j < $arr_len-1-$i; $j++){
                      if($arr[$j] > $arr[$j + 1]){
                          $temp=$arr[$j];
                          $arr[$j]=$arr[$j+1];
                          $arr[$j+1]=$temp;
                          $flag = 1;
                      }
                  }
                  if($flag == 0){
                      break;
                  }else{
                      $flag = 0;
                  }
              }
          }
          date_default_timezone_set('PRC');
          echo '
          '
          . date('H:i:s'); bubble($arr); echo '
          '
          . date('H:i:s'); echo '
          ';
          print_r($arr);
          
        • 选择排序

          $arr = array(12,34,99,3,45,103,4);
          function selectSort(&$arr){
              $arr_len=count($arr);
              for($i = 0; $i < $arr_len; $i++){
                  $arr_min = $arr[$i];
                  $arr_index = $i;
                  for($j = $i; $j < $arr_len; $j++){
                      if($arr_min > $arr[$j]){
                          $arr_min = $arr[$j];
                          $arr_index = $j;
                      }
                  }
                  if($arr_index != $i){
                      $arr[$arr_index] = $arr[$i];
                      $arr[$i] = $arr_min;
                  }
              }
          }
          selectSort($arr);
          echo '
          ';
          print_r($arr);
          
        • 插入排序

          $arr = array(12,3,436,43,76,10);
          function insertSort(&$arr){
              $arr_len = count($arr);
              for($i = 1; $i < $arr_len; $i++){
                  $index = $i - 1;
                  $arrItem = $arr[$i];
                  while($index >= 0 && $arr[$index] > $arrItem){
                      $arr[$index+1] = $arr[$index];
                      $index--;
                  }
                  $arr[$index+1] = $arrItem;
              }
          }
          insertSort($arr);
          echo '
          ';
          print_r($arr);
          
        • 快速排序

          四种排序速度:冒泡排序 < 选择排序 < 插入排序 < 快速排序

      • 查找

        • 顺序查找

          $arr = array(12,3,34,45,111,23,5,67,23);
          function search($arr,$item){
              $arr_len = count($arr);
              $flag = 0;
              for($i = 0; $i < $arr_len; $i++){
                  if($item == $arr[$i]){
                      echo '找到了,索引值为:' . $i . '
          '
          ; $flag = 1; } } if($flag == 0){ echo '很抱歉,没有找到哦。'; } } search($arr,23);
        • 二分法查找

          二分法查找适用于查找有序的数组。

          $arr = array(1,3,6,12,22,34,45,56,67,99,122,155);
          function searchNum($left_index,$right_index,$arr,$item){
              if($left_index > $right_index){
                  echo '很抱歉,没有找到。';
                  return;
              }
              $mid_index = round(($left_index + $right_index) / 2);
              if($arr[$mid_index] == $item){
                  echo '找到了,索引值为:' . $mid_index;
              }else if($arr[$mid_index] > $item){
                  searchNum($left_index,$mid_index-1,$arr,$item);
              }else if($arr[$mid_index] < $item){
                  searchNum($mid_index+1,$right_index,$arr,$item);
              }
          }
          searchNum(0,count($arr)-1,$arr,288);
          
      • 二维数组

        $arr = array(array(12,23,34),array(123,345,333),100);
        $arr_len = count($arr);
        for($i = 0; $i < $arr_len; $i++){
            $arr2_len = count($arr[$i]);
            if(is_array($arr[$i])){
                for($j = 0; $j < $arr2_len; $j++){
                    echo $arr[$i][$j] . ' ';
                }
            }else{
                echo $arr[$i];
            }
            echo '
        '
        ; }
        $arr = array(array(12,23,34),array(123,345,333),100);
        foreach($arr as $val){
            if(is_array($val)){
                foreach($val as $v){
                    echo $v . ' ';
                }
            }else{
                echo $val . ' ';
            }
            echo '
        '
        ; }
    • 对象

      //var dict = {"name":"lnj","age":"33"};
      //dict["name"];
      $dict = array("name"->"lnj","age"->"33");
      print_r($dict);
      echo "
      "
      ; echo $dict["name"];

    流程控制

    php分支循环语句

    $age = 19;
    if($age >= 18){
    echo "成年";
    }else{
    echo "未成年";
    }
    
    $res = ($age>=18)?"成年""未成年";
    echo $res;
    
    switch($age){
    case 0:
    echo "0";
    break;
    case 18:
    echo "成年人";
    break;
    default:
    echo "未成年"
    break;
    }
    
    $index=0;
    while($index < count($arr)){
    echo $arr[$index];
    echo "
    "
    ; $index++; }
    • 如何运行编写好的PHP文件?

      因为PHP是服务端编程语言,所以要在服务端运行

      • php文件名不能有中文
      • php文件必须放到服务器文件夹下
      • 通过ip找到服务器文件夹,选中php文件访问
    • 服务端返回浏览器的是什么?

      • php程序的执行结果

        注意:执行结果中有中文,必须要在php文件顶部设置

    内容输出

    • echo 输出简单数据类型 如字符串 数值等
    • print 输出复杂数据类型 数组
    • var_dump() 输出详细信息 如数组 对象
    echo "这是第一个输出方法,调用echo";
    print "这是第二个输出方法,调用print";
    $text1="我是一个变量";
    $cars=array("我","是","一","个","数","组","字","符","串");
    
    echo $text1 . "$cars[1]"; //echo调用变量时可以用引号,也可以不用引号,推荐使用echo,因为其不返回值效率更高
    

    注意:后端编写的代码不能直接运行,只能放到服务器对应的文件夹下,通过服务器运行

    • 如何通过服务器运行:通过ip地址找到服务器对应的文件夹,然后再找到对应的文件运行

    常用函数

    中软Day14——模板引擎及PHP结构_第3张图片

    定义函数

    class Oj
    {
    var $object;
    function Oj($object="oj"){
    $this->object=$object;
    }
    function what_object(){
    echo "函数调用成功";
    
    }
    
    } //定义
    
    $test=new Oj("oj");
    $test->what_object(); //对方法进行引用
    

    你可能感兴趣的:(中软Day14——模板引擎及PHP结构)