中软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 = " <p>姓名: " + obj.name + "</p> " +
                  " <p>年龄: " + obj.age + "</p> " +
                  " <p>性别: " + obj.sex + "</p> " +
                  " <p>描述: " + obj.desc + "</p> ";
    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='男'}}
  <div class="man">
{{else}}
  <div class="woman">
{{/if}}
数据循环
{{each target}}
     {{$index}} {{$value}}
 {{/each}}
  <!-- 原始语法 -->
 <% for(var i = 0; i < target.length; i++){ %>
     <%= i %> <%= target[i] %>
 <% } %>
each语法
<!--
  1. {{each data}}  可以通过$value 和 $index获取值和下标
  2. {{each data v i}}  自己指定值为v,下标为i
-->
{{each data v i}}
<li>
  <a href="{{v.url}}">
    <img src="{{v.src}}" alt="">
    <p>{{v.content}}</p>
   </a>
 </li>
{{/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基本数据类型

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

    $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 '<pre>';
    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 配合使用,使致命错误不被忽略。

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

    <?php
    
        $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 "<p>测试函数内部的变量:</p>";
echo "变量x是:$x"; //编译报错,因为在php中全局变量因为不是在函数内部声明,所以不能用在函数内部,但是可以定义相同的变量
echo "<br>";
echo "变量y是:$y";
}

myTest();
echo "<P>测试函数之外的变量:</P>";
echo "变量x是:$x";
echo "<br>";
echo "<P>变量y是:$y</P>"; //编译报错,函数内部声明的变量同样不能用在函数外

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

function myTestThree(){
static $x=0; //类似于静态变量,通常当一个函数结束时,会释放掉所有变量的值,此时将不会产生累加效果
echo "<p>$x</p>";
$x++; //但是,当我们加上static关键词之后,变量的值将不会释放,而会一直保存
}

myTestThree(); //0
myTestThree(); //1
myTestThree(); //2
  • 变量作用域:
    1.全局(Global)作用域,在函数外声明的变量只能在函数外使用
    可使用global关键词在函数内访问全局变量
    2.局部(LOCAL)作用域,在函数内声明的变量,只能在函数内使用

    3.超全局作用域

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

  • 定义变量

    <?php
    
        $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 '<p>';//段楼开始标记
    
        echo $array1[1];//输出广州
    
        echo '<br/>';//换行符
    
        echo $array2[0];//输出php
    
        echo '</p>';//段落结束标记
    
       
    
    $num1='5.23r*r';
    
        $num2=1;
    
        echo $num1+$num2;//输出6.23
    
    ?>
    
  • 引用、静态变量及全局变量

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

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

命名规则

常量名 类常量建议全大写,单词间用下划线分隔    // MIN_WIDTH  
变量名建议用下划线方式分隔             	  // $var_name  
函数名建议用驼峰命名法                   // varName  
定界符建议全大写                       // <<<DING, <<<'DING'  
文件名建议全小写和下划线、数字          // func_name.php  
私有属性名、方法名建议加下划线         // private $_name _func  
接口名建议加I_                     // interface I_Name  

声明常量

  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);

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

    在这里插入图片描述

预定义变量

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

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

    • $_GET变量(数组)

      Get这个词,常常出现在<formaction=”abc.php” method=”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网页中
      
      <?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”>
        
                    项目一:<inputtype=”text” name=”uName”>
        
                    项目二:<inputtype=”password” name=”uPswd”>
        
                  <input type=”submit”value=”提交”>
        
               </form>
        

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

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

        <?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”>
        
                   项目一:<inputtype=”text” name=”uName”>
        
                   项目二:<inputtype=”password” name=”uPswd”>
        
                 <input type=”submit” value=”提交”>
        
             </form>
        
             <form action=”abc.php” method=”get”>
        
                项目一:<input type=”text”name=”uName”>
        
                 项目二:<inputtype=”password” name=”uPswd”>
        
               <input type=”submit” value=”提交”>
        
            </form>
        
            //两者接受数据都一样
        
        <?php
        
              $v1=$_REQUEST[‘uName’];   //单引号也可以用双引号,本质是一个字符串,其实是数组的键名(下标)
        
             $v2=$_REQUEST[‘uPswd’];  //该键名必须跟提交的时候名字完全一致(区分大小写)
        
             echo ”v1=$v1,v2=$v2”;
        
        ?>
        
      • 当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”,顺序反过来
        <form action=”abc.php?a=5&b=10”method=”post”>
        
        项目一:<inputtype=”text” name=”uName”>
        
        项目二:<inputtype=”password” name=”uPswd”>
        
        项目三:<input type=”text”name=”a”>
        
        <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变量(数据)

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

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

      <?php
      $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);
      
    • 数组的常用函数

    在这里插入图片描述

    • 删除数组或数组项

      $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 "<br/>";
      echo $arr[1];//echo不能取出数组但可以取出数组中的元素
      //数组遍历
      for($i=0;i<count($arr);$i++){
      echo $arr[$i];
      echo "<br/>";
      }
      
    • 关联数组

      $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 '<br>' . date('H:i:s');
        bubble($arr);
        echo '<br>' . date('H:i:s');
        echo '<pre>';
        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 '<pre>';
        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 '<pre>';
        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 . '<br>';
                    $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 '<br>';
      }
      
      $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 '<br>';
      }
      
  • 对象

    //var dict = {"name":"lnj","age":"33"};
    //dict["name"];
    $dict = array("name"->"lnj","age"->"33");
    print_r($dict);
    echo "<br/>";
    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 "<br/>";
$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地址找到服务器对应的文件夹,然后再找到对应的文件运行

常用函数

在这里插入图片描述

定义函数

class Oj
{
var $object;
function Oj($object="oj"){
$this->object=$object;
}
function what_object(){
echo "函数调用成功";

}

} //定义

$test=new Oj("oj");
$test->what_object(); //对方法进行引用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值