PHP学习笔记

1.入门

Apache

  1. 目录介绍
    在这里插入图片描述

  2. Httpd.exe

    • 服务器进程:运行之后才能够工作

    • 来插看Apache具有那些功能以及配置文件是否有错:http或者http.exe(文件所在目录)

      • 查看使用模块:httpd -M:
        在这里插入图片描述

        • static(静态加载):Apache启动就加载好了,可以直接使用
        • shared(动态加载):在使用到的时候才会加载
      • 验证配置文件是否有效

在这里插入图片描述

   - syntax OK 表明可以正常使用
  1. 配置默认站点:

    1. 让 Apache确定服务器上访问的位置:网站文件夹所在位置

      • http.conf:Define

在这里插入图片描述

  1. 方便用户使用名字访问对应的网站:给文件夹对应的取一个别名

    • http.conf:ServerName

在这里插入图片描述

  - 端口可以单独实现:http.conf: Listen

在这里插入图片描述

  1. 凡是涉及到Apache配置文件的修改,都需要重启Apache才能生效

  2. 实现DNS域名解析:通常默认站点都是本地DNS:hosts文件

php环境配置

  • phpstudy
  • phpstrom

2.php语法初步

1.PHP代码标记

在PHP历史发展中。可以使用多种标记来区分PHP脚本

ASP标记:<% php代码 %>

短标记:<? php代码 ?>以上两种基本弃用

脚本标记:<script language="php">php代码</script>

<script language="php">
    echo 'hello world'
</script> <!--目前已经在HTML5的版本中已经启用-->

标准标记(常用):<?php php代码>

2.注释

php中注释分为两种:行注释和块注释

  • // 或 # 代表行注释
  • /* */ 代表块注释

3.语法结束符

  • ;为结束符

4.变量

  • 命名

    $a=54;
    
  • 变量的销毁

    unset($a); //unset($加变量名)
    
  • 变量命名规则:

    • 变量名称严格区分大小写
    • 字母或者下划线开头,后面接任意数量的字母数字下划线都可以
    • 中间不能有空格,不能用点分开
    • $this 是一个特殊的变量,它不能被赋值
  • 变量的赋值:

    • 变量默认总是传值赋值。那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。

    • PHP 也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单的引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然

      • 使用引用赋值,简单地将一个 & 符号加到将要赋值的变量前(源变量)
      $a=54;
      $b=$a;
      $c=&$a;
      $a=3;
      echo  "$b<br>" ; //b仍然是54
      echo  $c;		 //c变成3
      
  • 强制类型转换

    $a=(int)true;
    
  • 变量的作用域:

    • 定义在函数外部的就是全局变量,它的作用域从定义处一直到文件结尾。

    • 函数内定义的变量就是局部变量,它的作用域为函数定义范围内。

    • 函数之间存在作用域互不影响。

    • 函数内访问全局变量需要 global 关键字或者使用 $GLOBALS[index] 数组

    • 在 php 中函数是有独立的作用域,所以局部变量会覆盖全局变量,即使局部变量中没有全局变量相同的变量,也会被覆盖

    • static作用域:当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。要做到这一点,在第一次声明变量时使用 static 关键字

      //变量作用域
      $a=5;
      $b=6;
      function t(){
          echo $a+$b;
          echo "<br>";
      }
      t(); //无法显示
      // global的使用
      $a=5;
      $b=6;
      function t(){         
          global $a,$b;	
          echo $a+$b;		
          echo "<br>";
      //    第二种写法
      //    echo $GLOBALS['a']+$GLOBALS['b'];
      //    echo "<br>";
      }
      t(); //显示为11
      

5.echo和print

  • 区别:

    • cho - 可以输出一个或多个字符串
    • print - 只允许输出一个字符串,返回值总为 1
    • echo 输出的速度比print快,echo 没有返回值,print有返回值1。
  • echo:echo 命令输出字符串(字符串可以包含 HTML 标签)

    $a=1;$b=2;$c=3;
    $cars=array("Volvo","BMW","Toyota");
    echo "<h2>这是一个h2标签</h2>";
    echo "hello,wolrd(你好,世界)<br>";
    echo "多个","字符串","!!!","<br>";
    echo "a=$a<br>";
    echo "这是一个 {$cars[1]}车";
    
  • print: print 命令输出字符串(字符串可以包含 HTML 标签)

    $a=1;$b=2;$c=3;
    $cars=array("Volvo","BMW","Toyota");
    print "<h2>我是一个h2标签</h2>";
    print "a=$a<br>";
    print "这是一个{$cars[1]}<br>";
    print $a+$b;
    

6.EOF(heredoc)使用说明

  • PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法.

  • 使用概述

    echo <<<EOF
    <h1>我是h1标签</h1>
    <p>我是p标签</p>
    EOF;
    
    $name="hello";
    $a=<<<LLL
    ABC$name
    "123"
    LLL;
    
    echo $a;
    
    • 必须后接分号,否则编译通不过。
    • EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致
    • 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
    • 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
    • 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法
    • 可以使用HTML标签

7.数据类型

  • 分类:String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。

  • 字符串:

    • 单引号双引号都可以使用
  • 整型:整数是一个没有小数的数字

    • 十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。
  • 浮点型:浮点数是带小数部分的数字,或是指数形式。

  • 布尔型:布尔型可以是 TRUE 或 FALSE。

  • 数组:

    // =>键值对 key=>value 
    $a=array(
        1=>'bar',
        "1"=>'hhh',
        1.5=>'lll'
        true=>'666'
    );
    //
    $b=[
      "hhh"=>666,
      'qqq'=>55
    ];
    $c = array(
             "a",
             "b",
        6 => "c",
             "d",
    );
    $d=[1,2,3,'jjj'];
    echo $a[1]; //666
    echo "<br>";
    echo $b["hhh"]; //666
    echo "<br>";
    echo $c[7]; //d
    echo "<br>";
    echo $d[3]; //jjj
    $d[3]='hhh'; //数组的赋值
    unset($a);   //删除数组a
    unset($b[1]) //删除数组b的第二个元素
    
    • 数组单元可以通过 array[key] 语法来访问
    • 对于数组a来说所有的键名都被强制转换为 1,则每一个新单元都会覆盖前一个的值,最后剩下的只有一个 666
    • 对于数组c来说可以看到最后一个值 "d" 被自动赋予了键名 7。这是由于之前最大的整数键名是 6
  • 对象:

    • 使用class关键字声明类对象

    • 类是可以包含属性和方法的结构。

      然后我们在类中定义数据类型,然后在实例化的类中使用数据类型

      class foo
      {
          function do_foo()
          {
              echo "Doing foo."; 
          }
      }
      
      $bar = new foo;
      $bar->do_foo()
      
  • NULL值

    • NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。

      NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别

  • print_r:

    打印关于变量的易于理解的信息,如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。 记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。

  • var_dump

    此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构

  • print_r和var_dump的区别:

    var_dump 返回表达式的类型与值而 print_r 仅返回结果,相比调试代码使用 var_dump 更便于阅读。

8.常量:

  • 定义和使用:

    define('PHP',111);
    echo PHP;
    
    • 按照惯例常量的标识符一般大写
  • 常量与变量的区别:

    • 常量前面没有$符号
    • 常量只能用define()函数定义,不能通过赋值语句
    • 常量可以不用理会变量范围的规则而在任意地方定义和使用
    • 常量一旦被定义就不能重新定义或取消定义
    • 常量的值只能说 bool,int,float,string类型
  • 预定义常量:

    • 使用print_r(get_defined_constants());可以查看所有的预定义常量

    • 预定义常量不区分大小写

    • 魔术常量:在预定义常量中有些是以__开头的常量

在这里插入图片描述

9.运算符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 条件运算符

    $x>$y?$a:$b
    
  • 组合比较符

    $c = $a <=> $b;
    
    • 如果 $a > b ∗ ∗ , 则 ∗ ∗ b**, 则 ** b,c 的值为 1
    • 如果 $a == b ∗ ∗ , 则 ∗ ∗ b**, 则 ** b,c 的值为 0
    • 如果 $a < b ∗ ∗ , 则 ∗ ∗ b**, 则 ** b,c 的值为 -1
  • 运算优先级
    在这里插入图片描述

10.流程控制

  • If Else
$a=1;
if($a==2){
    echo $a;
}
elseif ($a==3){
    echo $a+1;
}
else{
    echo $a;
}
  • switch
$favcolor="red";
switch ($favcolor)
{
case "red":
    echo "你喜欢的颜色是红色!";
    break;
case "blue":
    echo "你喜欢的颜色是蓝色!";
    break;
case "green":
    echo "你喜欢的颜色是绿色!";
    break;
default:
    echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
  • while
while (条件)
{
    // 要执行的代码;
}
  • do…while
do
{
    // 要执行的代码;
}
while (条件);
  • for
for (初始值; 条件; 增量)
{
    // 要执行的代码;
}
  • foreach
foreach ($array as $value)
{
    // 要执行代码;
}
  1. 每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值
foreach ($array as $key => $value)
{
    // 要执行代码;
}
  1. 每一次循环,当前数组元素的键与值就都会被赋值给 $key 和 $value 变量(数字指针会逐一地移动),在进行下一次循环时,你将看到数组中的下一个键与值。

11.函数

  • 自定义函数的

    $a=1;$b=2;
    function maxNamber($x,$y){
        return $x>$y?$x:$y;
    }
    echo maxNamber($a,$b);
    
    • 函数的参数是值传递(默认)
    • 也可以用引用传递参数
    function a(&$b){
        $b+=1;
    }
    $i=1;
    a($i);
    echo $i;
    
    • 可变参数列表

      function a(){
          var_dump(func_get_args()); //将自定义函数的参数以数组的方式返回
          echo '<br>';
          var_dump(func_get_arg(2)); //以字符串的形式返回第3个参数
          echo '<br>';
          var_dump(func_num_args()); //返回自定义函数个数
          echo '<br>';
      }
      
  • 递归函数

    function a($b){
        if ($b!=1){
            return $b+a($b-1);
        }
        else{
            return 1;
        }
    }
    
  • 内置函数

    • https://www.runoob.com/php/php-ref-array.html

12.数组

  • 数字数组

    $a=array('11',22,'99'); //带有数字 ID 键的数组
    
  • 关联数组

    $a=array('q'=>6, 'w'=>5, 'e'=>4); //带有指定的键的数组,每个键关联一个值
    
  • 多维数组

    $a=array(
        $c=array(1,2,3),
        $b=array(4,5,6)
    );
    
  • 获取数组长度

    $a=array('11',22,'99');
    $b=count($a);
    echo $b; //3
    
  • 数组的遍历

    // 数字数组的遍历用for循环
    $a=array('11',22,'99');
    for ($i=0;$i<count($a);$i++){
        echo $a[$i];
        echo "<br>";
    }
    // 关联数组的遍历用foreach
    $a=array(q=>6, w=>5, e=>4);
    foreach ($a as $key=>$value){
        echo $key.'=>',$value;
        echo '<br>';
    }
    // 多维数组的遍历
    $a=array(
        $c=array(1,2,3),
        $b=array('q'=>6, 'w'=>5, 'e'=>4)
    );
    for ($i=0;$i<count($a);$i++){
        if ($i==0){
            for ($j=0;$j<count($a[$i]);$j++){
                echo $a[$i][$j];
                echo "<br>";
            }
        }
        else{
            foreach ($a[$i] as $key=>$j){
                echo $key,'=>',$j;
                echo "<br>";
            }
        }
    }
    
  • 数组排序

    • sort() - 对数组进行升序排列
    • rsort() - 对数组进行降序排列
    • asort() - 根据关联数组的值,对数组进行升序排列
    • arsort() - 根据关联数组的值,对数组进行降序排列
    • ksort() - 根据关联数组的键,对数组进行升序排列
    • krsort() - 根据关联数组的键,对数组进行降序排列
    $a=array('q'=>6, 'w'=>5, 'e'=>4);
    $b=array('11',2,'99',66);
    sort($b);
    for ($i=0;$i<count($b);$i++){
        echo $b[$i];
        echo '<br>';
    }// 2 11 66 99
    rsort($b);
    for ($i=0;$i<count($b);$i++){
        echo $b[$i];
        echo '<br>';
    } // 99 66 11 2
    asort($a);
    foreach ($a as $key=>$value){
        echo $key,'=>',$value;
        echo '<br>';
    }// e=>4 w=>5 q=>6
    arsort($a);
    foreach ($a as $key=>$value){
        echo $key,'=>',$value;
        echo '<br>';
    }// q=>6 w=>5 e=>4
    ksort($a);
    foreach ($a as $key=>$value){
        echo $key,'=>',$value;
        echo '<br>';
    }// e=>4 q=>6 w=>5
    krsort($a);
    foreach ($a as $key=>$value){
        echo $key,'=>',$value;
        echo '<br>';
    }// w=>5 q=>6 e=>4
    

13.字符串

  • 并置运算符:并置运算符 (.) 用于把两个字符串值连接起来

    $txt1="Hello world!";
    $txt2="What a nice day!";
    echo $txt1 . " " . $txt2; //Hello world! What a nice day!
    
  • strlen()函数:strlen() 函数返回字符串的长度(字节数)

    echo strlen("Hello world!"); //12
    
  • strpos():strpos() 函数用于在字符串内查找一个字符或一段指定的文本。如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE

    //在字符串 "Hello world!" 中查找文本 "world"
    echo strpos("Hello world!","world"); //6
    

14.超级全局变量

  1. 介绍:PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。

  2. 超级全局变量列表

    • $GLOBALS: 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键

    • $_SERVER:是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组

      • 属性

        元素/代码描述
        $_SERVER[‘PHP_SELF’]当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER[‘PHP_SELF’] 将得到 /test.php/foo.bar。FILE 常量包含当前(例如包含)文件的完整路径和文件名。 从 PHP 4.3.0 版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用。
        $_SERVER[‘GATEWAY_INTERFACE’]服务器使用的 CGI 规范的版本;例如,“CGI/1.1”。
        $_SERVER[‘SERVER_ADDR’]当前运行脚本所在的服务器的 IP 地址。
        $_SERVER[‘SERVER_NAME’]当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(如: www.runoob.com)
        $_SERVER[‘SERVER_SOFTWARE’]服务器标识字符串,在响应请求时的头信息中给出。 (如:Apache/2.2.24)
        $_SERVER[‘SERVER_PROTOCOL’]请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。
        $_SERVER[‘REQUEST_METHOD’]访问页面使用的请求方法;例如,“GET”, “HEAD”,“POST”,“PUT”。
        $_SERVER[‘REQUEST_TIME’]请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496)
        $_SERVER[‘QUERY_STRING’]query string(查询字符串),如果有的话,通过它进行页面访问。
        $_SERVER[‘HTTP_ACCEPT’]当前请求头中 Accept: 项的内容,如果存在的话。
        $_SERVER[‘HTTP_ACCEPT_CHARSET’]当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:“iso-8859-1,*,utf-8”。
        $_SERVER[‘HTTP_HOST’]当前请求头中 Host: 项的内容,如果存在的话。
        $_SERVER[‘HTTP_REFERER’]引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。)
        $_SERVER[‘HTTPS’]如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。
        $_SERVER[‘REMOTE_ADDR’]浏览当前页面的用户的 IP 地址。
        $_SERVER[‘REMOTE_HOST’]浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。
        $_SERVER[‘REMOTE_PORT’]用户机器上连接到 Web 服务器所使用的端口号。
        $_SERVER[‘SCRIPT_FILENAME’]当前执行脚本的绝对路径。
        $_SERVER[‘SERVER_ADMIN’]该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。(如:someone@runoob.com)
        $_SERVER[‘SERVER_PORT’]Web 服务器使用的端口。默认值为 “80”。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。
        $_SERVER[‘SERVER_SIGNATURE’]包含了服务器版本和虚拟主机名的字符串。
        $_SERVER[‘PATH_TRANSLATED’]当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。
        $_SERVER[‘SCRIPT_NAME’]包含当前脚本的路径。这在页面需要指向自己时非常有用。FILE 常量包含当前脚本(例如包含文件)的完整路径和文件名。
        $_SERVER[‘SCRIPT_URI’]URI 用来指定要访问的页面。例如 “/index.html”。
    • $_REQUEST:用于收集HTML表单提交的数据

    • $_POST:PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method=“post”。

    • $_GET:同样被广泛应用于收集表单数据

    • $_FILES

    • $_ENV

    • $_COOKIE

    • $_SESSION

15.命名空间

  1. 命名空间存在的意义:

    • 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
    • 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性
  2. 声明:命名空间都通过关键字namespace来声明,如果一个文件中包含命名空间它必须在其他代码之前声明命名空间。

    // 一个文件中只有一个命名空间的情况
    namespace myMame{
        const name='lihua';
        function sayNmae(){
            echo name;
        }
    }
    // 一个文件中多个命名空间
    namespace myMame{
        const name='lihua';
        function sayNmae(){
            echo name;
        }
    }
    namespace girlfriend{
        const name='xiaohong';
        function sayHello(){
            echo 'hello';
        }
    }
    namespace {
        // 全局代码
    }
    // 声明子命名空间
    namespace Myproject\xiaoming\name{
        const name='xiaoming';
        const age='18';
    }
    
    • 命名空间的变量最好用大括号括起来
    • 在实际的编程实践中,非常不提倡在同一个文件中定义多个命名空间。这种方式的主要用于将多个 PHP 脚本合并在同一个文件中。
  3. 命名空间的使用

    • **非限定名称,或不包含前缀的类名称,**例如 $a=new foo(); 或 foo::staticmethod();。如果当前命名空间是 currentnamespace,foo 将被解析为 currentnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo。 警告:如果命名空间中的函数或常量未定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。
    • **限定名称,或包含前缀的名称,**例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespace\subnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespace\foo。
    • **完全限定名称,或包含了全局前缀操作符的名称,**例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespace\foo。
    // 1.php
    namespace Myproject;
        include '2.php';
        const a=1;
        function a(){
            echo '我是Myproject函数a';
            echo "<br>";
        }
        class a
        {
            function name(){
                echo '111';
                echo "<br>";
            }
        }
    // 非限制名称
    echo a;       //显示Myproject的常量a
    echo "<br>";
    a();          //使用Myproject的函数a
    a::name();    //使用Myproject的类a的方法name
    // 限定名称
    echo \Newproject\a;    //显示Myproject\Newproject的常量a
    echo "<br>";
    \Newproject\a();       //使用Myproject\Newproject的函数a
    \Newproject\a::name(); //使用Myproject\Newproject的类a的方法name
    // 完全限制名称
    echo \Myproject\a;    //显示Myproject的常量a
    echo "<br>";
    \Myproject\a();       //使用Myproject的函数a
    \Myproject\a::name(); //使用Myproject的类a的方法name
    // 2.php
    namespace Newproject;
        const a=2;
        function a(){
            echo '我是Newproject的函数a';
            echo "<br>";
        }
        class a
        {
            function name(){
                echo '222';
                echo "<br>";
            }
        }
    
  4. 命名空间和动态语言特征

    • 必须使用完全限定名称(包括命名空间前缀的类名称)。注意因为在动态的类名称、函数名称或常量名称中,限定名称和完全限定名称没有区别,因此其前导的反斜杠是不必要的
  5. namesoace关键字和_NAMESPACE_常量

    • PHP支持两种抽象的访问当前命名空间内部元素的方法,NAMESPACE 魔术常量和namespace关键字。

    • 常量__NAMESPACE__的值是包含当前命名空间名称的字符串。在全局的,不包括在任何命名空间中的代码,它包含一个空的字符串

      //使用__NAMESPACE__动态创建名称
      namespace MyProject;
      
      function get($classname)
      {
          $a = __NAMESPACE__ . '\\' . $classname;
          return new $a;
      }
      //关键字 namespace 可用来显式访问当前命名空间或子命名空间中的元素。它等价于类中的 self 操作符。
      namespace MyProject;
      
      use blah\blah as mine; // 引入了 blah\blah 命名空间,并定义了个别名mine
      
      mine\mine(); // 调用函数 blah\blah\mine()
      namespace\blah\mine(); // 调用函数 MyProject\blah\mine()
      
      namespace\func(); // 调用函数 MyProject\func()
      namespace\sub\func(); // 调用函数 MyProject\sub\func()
      namespace\cname::method(); // 调用 MyProject\cname 类的静态方法
      $a = new namespace\sub\cname(); // 实例化 MyProject\sub\cname 类的对象
      $b = namespace\CONSTANT; // 将常量 MyProject\CONSTANT 的值赋给 $b
      
  6. 使用命名空间:别名/导入

    • PHP 命名空间支持 有两种使用别名或导入方式:为类名称使用别名,或为命名空间名称使用别名。

    • 在php中别名是通过操作符use来实现的

      //使用use操作符导入/使用别名
      namespace MyProject;
      use blah\blah as mine; // 引入了 blah\blah 命名空间,并定义了个别名mine
      // 下面的例子与 use My\Full\NSname as NSname 相同
      use My\Full\NSname;
      // 导入一个全局类
      use \ArrayObject;
      // 一行中包含多个use语句
      use My\Full\Classname as Another, My\Full\NSname;
      
      $obj = new Another; // 实例化 My\Full\Classname 对象
      NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func
      // 导入和动态名称
      use My\Full\Classname as Another, My\Full\NSname;
      
      $obj = new Another; // 实例化一个 My\Full\Classname 对象
      $a = 'Another';
      $obj = new $a;      // 实际化一个 Another 对象
      // 导入和完全限定名称
      use My\Full\Classname as Another, My\Full\NSname;
      
      $obj = new Another; // 实例化 My\Full\Classname 类
      $obj = new \Another; // 实例化 Another 类
      $obj = new Another\thing; // 实例化 My\Full\Classname\thing 类
      $obj = new \Another\thing; // 实例化 Another\thing 类
      

16.面向对象

  1. 内容:

    • − 定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。
    • 对象 − 是类的实例。
    • 成员变量 − 定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性。
    • 成员函数 − 定义在类的内部,可用于访问对象的数据。
    • 继承 − 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
    • 父类 − 一个类被其他类继承,可将该类称为父类,或基类,或超类。
    • 子类 − 一个类继承其他类称为子类,也可称为派生类。
    • 多态 − 多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
    • 重载 − 简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
    • 抽象性 − 抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
    • 封装 − 封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。
    • 构造函数 − 主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
    • 析构函数 − 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后" 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)
  2. 创建

    class name{
        //创建属性
        var $a,$b; //类的变量声明用var
        //构造函数 使用__construct
        function __construct($a,$b){
            $this->a=$a;
            $this->b=$b;
        }
        //解析函数 __destruct
        function __destruct()
        {
            echo $this->a;
        }    
        //创建方法
        function sayMAX(){
            echo $this->a+$this->b;
        }
        //创建常量
    	const jj=11;
    }
    $b=new name;
    echo $b->a; //访问属性
    $b->sayMAX(); //访问方法
    $c=new name(2,3); //通过构造函数来创建对象
    
  3. 访问控制

    • **public(公有):**公有的类成员可以在任何地方被访问。
    • **protected(受保护):**受保护的类成员则可以被其自身以及其子类和父类访问。
    • **private(私有):**私有的类成员则只能被其定义所在的类访问。
  4. 继承

    class Child extends Parent {
       // 代码部分
    }
    

3.时间与日期

  1. 设置时区

    // date_default_timezone_set
    date_default_timezone_set(Asia/Shanghai); //将时区设置为上海时区
    
  2. 获取当前Unix时间戳

    // time
    echo time(); //返回秒数
    
  3. 获取指定时间Unix时间戳

    //mktime
    echo mktime(12,30,00,10,1,2020); //获得2020年10月1日12点30分00秒的时间戳
    
  4. 从Unix时间戳截取时间日期信息

    //date() 格式化一个本地时间/日期
    //第一个参数:必填写上你所需要的时间日期格式。把format
    //第二个参数:选填,当前时间默认time()
    var_dump(date('Y-m-d:i')); //格式当地时间的日期
    var_dump(date('Y-m-d:i:s',mktime(12,30,00,10,1,2020)));//格式2020年10月1日12点30分00秒
    
    • d - 代表月中的天 (01 - 31)
    • m - 代表月 (01 - 12)
    • Y - 代表年 (四位数)
    • i - 代表分钟
    • s - 代表秒
  5. 获取Unix时间戳和微秒数

    // microtime()
    var_dump(microtime(true)); //
    

4.图像处理

  1. 简单介绍:基本步骤:创建图像,绘制图像,输出图像,释放资源

    1. 创建图像

      //imagecreatetruecolor()
      $img=imagecreatetruecolor(120,200); //新建120*200的真彩图像
      
    2. 绘制图像

      $color1=imagecolorallocate($img,50,50,50); //分配颜色
      $color2=imagecolorallocate($img,299,36,36); //分配颜色
      imagefill($img,0,0,$color1); //区域填充
      
    3. 输出图像

      header('Content-type:image/jpeg'); //告诉浏览器我是一个图片
      imagejpeg($img);
      imagejpeg($img,'D:\phpstudy_pro\WWW\php学习\imgs\hhh.jpeg') //将img储存在D:\phpstudy_pro\WWW\php学习\imgs\hhh.jpeg
      
      • 在heard函数之前不能输入任何内容
      • heard必须放在最前面
      • 在我们的php代码函数里面,我们使用的/ 开头的路径 这个/不是值web的根目录,而是操作系统的文件的根目录
    4. 释放资源

      imagedestroy($img);
      
  2. 验证码

    header('Content-type:html;charset=utf-8');
    $img=imagecreatetruecolor(120,40);
    $colorBg=imagecolorallocate($img,rand(200,255),rand(200,255),rand(200,255)); //随机函数rand
    $colorBg1=imagecolorallocate($img,rand(200,255),rand(200,255),rand(200,255));
    imagefill($img,0,0,$colorBg);
    $color2=imagecolorallocate($img,rand(10,100),rand(10,100),rand(10,100));
    imagerectangle($img,0,0,119,39,$colorBg1); //边框绘制
    // 设置验证码
    $strarray=['a','b','c','d','e','f','h','i','g','k'];
    $str=' ';
    for ($i=0;$i<4;$i++){
        $str.=$strarray[rand(0,count($strarray))];
    }
     //背景设置
    for ($i=0;$i<100;$i++){
        imagesetpixel($img,rand(0,119),rand(0,39),imagecolorallocate($img,rand(100,200),rand(100,200),rand(100,200)));
    }
     //设置障碍
    for ($i=0;$i<3;$i++){
        imageline($img,rand(0,60),rand(0,40),rand(60,120),rand(0,40),imagesetpixel($img,rand(0,119),rand(0,39),imagecolorallocate($img,rand(100,200),rand(100,200),rand(100,200))));
    }
    // 设置验证码
    //imagestring($img,20,20,10,$str,$color2);
    imagettftext($img,15,0,0,39,$color2,'D:\phpstudy_pro\WWW\php学习\font\1.',$str);
    imagejpeg($img);
    

5.文件处理

  1. 文件加载原理

    • 在文件加载( include或者 require)的时候,系统会自动的将被包含文件中的代码相当
      于嵌入到当前文件中
    • 加载位置:在哪加载,对应的文件中的代码嵌入的位置就是对应的 include位置
    • 在PHP中被包含的文件是单独进行编译的
  2. include和require的区别

    • Include和 include_once的区别:
      • Include系统会碰到一次,执行一次;如果对统一个文件进行多次加载,那么系统会执行多
      • include_once:系统碰到多次,也只会执行一次
    • Require和 include的区别:本质都是包含文件,唯一的区别在于包含不到文件的时候,报错
      的形式不一样
      • include要求较低,不会阻止代码运行
      • require错误级别搞,会影响到下面的代码执行
  3. 文件加载路径

    1. 绝对路径:

      从磁盘的根目录开始(本地的据对路径)

      windonws:盘符 c:/路径/php文件

      linux:/路径/php文件

      从网站根目录开始(网络绝对路径)

      /:相当于网站主机名字绝对路径

    2. 相对路径:从当前文件所在目录开始的路径

      .或者./:当前文件夹

      …/:上级目录(当前文件夹的上一层文件夹)

    3. 绝对路径和相对路径的加载区别

      • 绝对路径相对效率偏低,但是相对安全(路径不会出问题)
      • 相对路径相对效率高些,但是容易出错(相对路径会发生改变)
    4. 嵌套包含的时候就很容易出现相对路径出错的问题:相对路径会因为文件的包含而改变(./
      和…/): windows下面,每一个文件夹下都有.和…的文件夹

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值