php基础笔记

php 页面必须在服务器环境中运行

基本语法:标准写法不需要修改配置文件,适用于任何php . <?php     ?>

变量必须以字母或下划线开头,不能以字母开头

单行注释// ,多行注释 /*  注释的内容可换行 */

单引号内部变量和特殊字符不会解析,双引号内部变量和特殊字符会解析。

{} 花括号包裹变量 ,告诉php解析器这是一个变量

在html中引用php文件, 把html后缀改成.php 在服务端运行。

定界符,简化单引号和双引号混用。 <<<z 定界符的开始符,不能有空格顶格,z;结束符要令起一行。例如
<<<demo
 内容
demo

外部变量 
$_GET[];
$_POST[];
$_REQUSET[] ; //效率没有post和get高

变量赋值  // $abc = 123 , 类型根据值确定

可变变量  //使用$(叨乐符)

系统常量

魔术常量

自定义常量  // 最常用常量类型
使用一个函数 define($name,$value,[false|true]) //第一个是常量名称,第二个是常量值 ,第三个是可选的true(不敏感)或false(敏感)参数 ,表示大小写敏感
常量的值不能改变

2-9 数据类型 // php是弱烈性语言,值决定变量或常量的类型
三大分类:1.标量类型-》字符串(string)、整形(int,integer)、浮点型(float,double)、布尔类型(boolean);
2.复合类型-》数组(array)、对象(Object)
3.其他类型-》资源(resource、例如:图片,文件,音频,视频)、空(null);

2-10 如何知道数据类型,检测数据类型 var_dump() //输出变量和常量的相关信息 ,有返回值, gettype() 没有返回值,需要给一个变量,用来做判断

2-11 字符串类型和布尔类型
定界符 <<<  ,false包括(0,'0', 0.0, 空字符串,空数组,null)

2-12 复合类型(数组和对象)
对象获取属性值或方法,获取属性$x->abc();  $x中的abc方法

2-13资源类型和null
fopen("public/")// 打开资源第一个参数打开路径
null 就表示变量没有值 ,通常用来清空一个变量 (用null可以改变变量类型,空字符串不会清空类型,两个有区别)

2-14 自由转换和强制转换
1.给变量赋值不同的类型,可以使变量类型自由转换
2.强制转换key前面(string) 小括号加类型 例如$y=(int)$x

2-15 设置数据类型
settype() //两个参数第一个设置的数据,第二个写要设置的类型 settype($x,'string');  // 会直接改变原变量的数据类型,不需要赋值,直接使用转换后的原来key

2-16 数据类型之转换函数
intvar() 、floatvar() 、boolval()、strval()  //这是一个函数 ,不会改变原来的变量类型 ,一般用于标量类型的转换

3-1 算数运算符
加法(+),减法(-),乘法(*),除法(/),取余(%)//算数运算符遵守混合运算法则 ,也可以在纯数字的字符串和布尔值进行计算

3-2 赋值运算符
最常见的赋值运算符是等号(=)表达式右侧的值赋值给左侧,直接赋值。(+=)是先加再赋值, $y+=$x 相当于 &y=&y+&x
(-=) 是先减再赋值  (*=) 先乘再赋值 (/=) 先除再赋值

3-3 自增运算符
++$x; //先自增再参与运算。 $x++ //后自增,先参与运算再自增

3-4 自减运算符
--$x ; $x--;   前自减先自己减一个1 再参与运算 ,后自减先运算再减1。
注释:(自增自减,++--,加减在前先加减,加减在后先运算。)

3-5 字符串运算符 //用来进行字符串拼接
.(点)把两个值拼接。$x.='我是一个字符串'; 相当于$x =$x . '我是一个字符串';

3-6 字符串运算符踩坑
和别的格式拼接得到的是字符串类型。 “加减”< 字符串拼接 < "乘除"

3-7 比较运算符 (关系运算符)//用于比较两个值
比较运算返回的结果是true和false. 等于==(值相同返回真不比较类型),=== 三个等号是全等于,值和类型都比较

3-8 比较运算符2
!=不等于 // 值相比较,不比较类型。<> //比较类型    。    !==值和类型都需要比较 。 >大于 //比较值不比较类型
<小于//比较值不比较类型 。还有>= 和<=都是比较值不比较类型

3-9 逻辑运算符1
&&和and(与运算) 全部为真才是真 //
||和or 或运算,至少一个为真就是真

3-10 逻辑运算符2
and和or这种英文单词时,运算符等级小于赋值运算 。运算优先级会低于赋值运算。如果要用英文单词的运算符加()括号优先。

3-11 逻辑运算符3
!(非) ,取反  。 xor(异或) , 有一个为真并且只有一个为真才是真。 别忘了为了运算优先级加()

3-14 逻辑运算符踩坑
xor 运算方式两两对比 ,从左像右根据两个比较,如果多个最后结果可能与【 有一个为真并且只有一个为真才是真】冲突。
运算符时按照顺序运算的。

4-1 if条件语句  //主要用于范围判断
条件语句用于对条件进行判断,不同的条件执行不同的代码。

4-2 if ...else条件语句
条件成立执行代码,条件不成立执行另一段代码。 括号中的值只能是真或者假

4-3 if..elseif ..else条件语句
elseif 没有空格和js不同js有空格。验证好多个条件。条件语句从上到下执行,如果条件满足立即执行,后面不管满足与否都不执行了

4-4 switch 条件语句
用于有精确值的判断: switch(值){ case 比对的值:  输出代码;break; ... 后面继续case } 。 每一层case都要break;终止代码,不然比对会继续,如果都不成功最后写default:   输出代码; 表示条件都不成立的输出

4-5 for循环原理
给定条件下,反复执行同一段代码块; 1先声明一个变量,赋初始值。2.检测变量的值是否满足条件。3.若满足条件,执行代码块,不满足,终止循环。4.变量自增或自减。5.再检测变量的值是否满足条件。

4-6 for 循环注意事项
在循环体中可以使用for()中的变量。
循环注意,循环必须要正常结束,否则会无限循环,浏览器卡死。

4-7 实战1-100连加
--

4-8 双层for循环
1.外层循环每执行1次,内层循环要执行1轮。2.外层循环和内层循环的变量名字不能相同

4-9 双层循环练习  // 外层循环的变量在内层循环使用
1.直角三角形
for($i=0; $i<=5; $i++){  //执行5次
           for($x=0;$x<=$i;$x++){  //根据外层依次递增*
               echo '*' ;
           }
           echo '<br/>';
        };
2.乘法表
for($i=1; $i<=9; $i++){  //执行5次
           for($x=1;$x<=$i;$x++){  //根据外层依次递增*
               echo "$i*$x=".$i*$x .' ' ;
           }
           echo '<br/>';
        };

4-10 while循环  //一般用在循环次数不确定的情况下,在指定条件为真时循环就会继续。
php的随机整数方法rand(1,100) //1~100的随机数

4-11  do-while循环
do{}while();   //不管条件是否真都会先执行1次再进入循环

4-12 终止循环
break; //终止全部循环
continue;  //终止本次循环,跳到下次循环

4-13三元表达式  //三元运算符  //三目表达式  //三目运算符
语法:条件?结果1:结果2     //条件满足返回结果1不满足返回结果2
三元表达式是一种运算符,运算符就有返回值

5-1 函数初识  //可重复使用的代码块

~5-4  //基础函数知识

5-5  函数的返回值
使用一个关键字 return 。 //返回值需要有接收的变量  , function hello(){ return "hello word"}; $ref = hello();
return 之后的不会再执行。遇到return会立刻返回结果,并且终止函数运行。

5-6 局部变量   //变量作用域  局部变量( 在函数内部使用的变量)  ,全局变量 ,超全局变量
empty(); //用于返回变量是否为空 , 如果变量为空返回true , 否则返回false。
函数外部不能访问函数内部变量。

5-7 全局变量
在函数外定义的变量叫全局变量 。 但不可以在函数内部使用。

5-8 静态全局变量   //可以外部变量,函数中使用。转变量
关键词global();  把全局变量变成静态全部变量使用 。global $x =3;  在哪里用就在哪里转。

5-9 静态局部变量
关键词: static  。   使用方式 ,第一次声明变量时使用关键词 。 static $x = 0;

5-10 超全局变量  //在全部作用域中始终可用的内置变量
1. $_GET 
2. $_POST
3. $_REQUEST 
4. $GLOBALS              //本章讲解
5. $_FILES
6. $_SEVER
7. $_SESSION
8. $_COOKIE
9. $_ENV
$GLOBALS  引用全局作用域中可用的全部变量
使用方式 $GLOBALS['x'] ;   $x =8;   function cc(){ echo $GLOBALS['x']}; cc();
在函数中可以直接修改外部的变量值 。 可知直接定义;

5-11 在函数中调用函数
这种使用方式叫做回调函数。

5-12 回调函数初识
有主函数(必需的一步) //在一个函数中调用另一个函数 ,(callback函数)函数B作为参数传递到另一个函数A中,在函数A执行函数B,函数B叫做回调函数。 调用时把函数名加上引号 a("b");此时b也是有一个函数。

5-13  回调函数练习1
进入主函数的第一步就是调用函数 , 函数的参数用”“ 包裹起来。使用 $变量名();

5-14  回调函数练习2
function jiafa($x,$y,$z,$m){
            $w = $y + $x;
            $c= $m($w,$z);
            return $c;
        };

        function chengfa($x,$y){
            return $x*$y;
        };
        $re = jiafa(4,9,2,"chengfa");
        echo $re;

5-15 递归函数初识
函数自己调用自己。要有跳出条件,不然会死循环。

5-16 递归函数练习       1连续加到100
function sums($x){
            if($x<=100){
                return $x+sums($x+1);
            }
            
        }
        echo sums(1);

5-17 递归函数练习   两个数之间的连加    任意两个数

function number($x,$y){
           
            if($x==$y){
                return $x;
            }
            else{
                return $x+number($x+1,$y);
            }
        }
       echo number(1,100);

5-18  载入文件
include "a.php";                   require("a.php")
require "a.php";  //最常用             require("a.php")   //不常用
这两种方式都是引入页面的方式。   

5-19 include和require区别
include如果载入的文件不存在,会警告错误。但是程序会继续执行。   如果载入的文件不重要,没有脚本其他功能依然能用使用include.
require如果载入的文件不存在,会致命错误,程序终止执行。

5-20 载入一次文件
include: 不会检测文件是否以为载入,会直接载入文件。
include_once :会检测文件是否被载入,如果文件已载入,不会被重复载入。
require_once 同上。

6-1 数组初识
数组:在一个变量中存储一个或多个值 。   两种数组类型,1.索引数组。2.关联数组
索引素组:$yiban = ['张三','李四','王五'];  //索引值自动分配
print_r   //专门用来打印数组的结构
echo <pre>   //预先文本格式化

6-2 三种数组创建方法
1.短数组语法创建,php5.4起开始使用。  $arr = ["张三","李四","王五"];
2.使用array()创建.。$arr =array("张三","李四","王五");
3.直接赋值,  $yiban[3] = "赵六";
数组中的类型可以是任意类型。

6-3 索引数组读取修改添加
读取 $yiban[索引值] 。
修改 $yiban[2] = "依依"  
添加 $yiban[3] = "廷廷"    //要知道索引值在哪里结束

6-4 获取数组长度
数组长度表示数组中元素的个数。
count()  //用户返回数组长度的函数  需要echo 打印 ,是整形。
给数组索引添加值时 :$yiban[count($yiban)] = "乐乐"; 

6-5 创建关联数组
以键值对的形式存在的数组,箭头之前的时键名,箭头之后的事键值
$xm = ["体重"=>90,'身高' =>180,"住址"=>"烟台"];
关联数组的键名为字符串并且可以自己定义,获取方式 键名: echo $xm['身高'];

6-6 关联数组读取修改添加
1、读取关联数组     键名: echo $xm['身高'];
2.  修改关联数组  echo $xm['身高']=185;
3.  添加数组       cho $xm['手机号']=18300500955;  //不要和原来键名相同
关联数组获取长度也是 count($xm);

6-7 索引数组的遍历
$len = count($yiban);
for( $i=0;i<$len;i++){ //  $yiban[$len]} 。 
foreach() ,只适用于数组,用于遍历数组中的每个值 , foreach(数组名 as 变量){ //要执行的代码}
foreach($yiban as $item){    //变量名自己定义
      echo $item
}

6-8 遍历关联数组
不能用索引获取数据,所以不能用for()方式。可以使用foreach(), 遍历到键值对
获取键名和键值 foreach($yiban as $key=>$item){ }

6-9 多维数组
按照数组形态进行分类
二维数组和二维以上的是多维数组
$yiban = array(
        '男'=>array('明明'=>'23',"赵琳"=>50),
        '女'=>array('白白'=>16,"花花"=>20,"馒头"=>12),
    );
获取 echo $yiban['女']['馒头'];
修改 ,添加同一维数组一样。

6-10 遍历多维数组1
foreach($yiban as $key=>$item){
         echo $key."有".count($item).'人:<br/>';
         foreach($item as $k=>$i){
             echo $k.'的年龄是'. $i."<br/>";
         }
     }
嵌套了foreach循环

6-11 遍历多维数组2
检测遍历是不是数组
is_array($yiban);  //功能函数

6-12 数组指针函数1
数组指针默认指向第一个元素;
end() 函数数组的指针移动到最后一个
reset() 数组函数, 将一个数组内部指针重置到数组的第一个元素所在的位置

6-13 数组指针函数2
prev() 把指针移动到当前的上一位。
next() 把指针移动到当前的下一位
current() 当前数组指针指向的值。
key()当前指针指向的键名
each() 同时获取数组键和值 ,但在php7.2以后不能使用。

6-14 使用指针遍历数组   //不是特殊情况最好不用指针遍历数组 ,空值时输出不全
while(current($yiban)){     //如果有这个键就进入循环
            echo key($yiban)."的年龄是".current($yiban)."<br/>"; //输出
            next($yiban);   //指针到下一个,最后false结束循环
        }

6-15 数组检测函数
is_array($arr); 是否是数组,是数组返回1 ,否则不返回
in_array(4,$arr ); 数组中某值是否存在 ,返回true或false。// 可以有第三个参数可选的,true 。 如果加true 不检测类型。
array_search(4,$arr);数组中某个值是否存在,  如果有返回值的键名,如果没有返回flase.  // 也有第三个参数判断类型。

6-16 数组检测函数2   //键名检测
不要用isset( )这个函数检测键名,如果是null会返回false;
array_key_exists('李四',$arr);  数组中是否存在某个键,   返回true和false 。 第一个参数是键名,第二个参数是数组。//可以检测关联数组也可以检测索引数组 

6-17 删除数组元素
array_pop()  //删除数组中最后一个元素 ,改变原数组, 如果删除后赋值 ,得到的是最后删除的那个元素。
array_shift($arr); //删除数组中第一个元素。其他和pop一样。

6-18指定位置删除插入元素
array_splice(数组,开始位置 ,删除个数,插入删除的地方的数据) //一共四个参数前两个必须,后两个可选  。
 删除从开始位置后面的所有元素,如果参数的开始位置是负值,表示从后往前的第多少个开始向后删除。
 插入的是关联数组的话,键名是数字。
再指定位置插入新数组的前面删除个数如果是0 ,就没有删除直接插入。

6-19 指定位置提取元素
array_slice(数组,开始位置,要提取元素的个数,保留或重置键名)  //一共四个参数,前两个必须,后两个可选。
开始位置为负时表示从后向前多少个为开始位置。
索引数组,第四个参数如果是true会保留键名,false或不填索引数组改变。 对关联数组都无效。

6-20 分割数组
1.把字符串分割成数组
explode(匹配分割点,要分割的字符串,[个数]);  
2.数组分割成数组
array_chunk(数组,新数组包含多少个元素,[true[false]]); //新数组时索引数组。 第三个参数如果加了true会保留原数组的键名。

6-21 合并数组1
array_merge(数组1,数组2,.....)    //需要合并几个写几个,如果是关系型数组键名重复后面的会覆盖前面的。
array_merge_recursive()  // 两个函数区别只有如果数组键名重复会把重复的键名 值转为数组。

6-22 合并数组2
1. 数组分割成字符串
implode(数组间放置的东西,数组 )  //第一个参数默认为空,可以不写
2.合并两个数组创建一个新数组
array_combine(键名数组,键值数组) 函数通过合并两个数组来创建一个新数组   //要合并的键名数组和键值数组两个数量要相同。
  
6-23 数组开头或尾部添加元素
1、array_push(数组,添加的值,添加的值...);    原使数组会改变  //用于索引数组   插入到末尾
即使数组中有字符串键名,您添加的元素也始终时数字索引下标
2.array_unshift(数组,添加值)  像数组开始添加 ,其他同上

6-24 数组随机取值
array_rand(数组,[多少个]);//函数返回数组中的随机键名

6-25 数组去重复
array_flip() // 函数用于反转, 键名和键值交换。 返回反转后的数组 。 如果键名反转后相同,只留下最后一个。(去重复)
两次反转达到去重效果.array_flip(array_flip($arr));

6-26 返回包含键名或键值的数组
array_values(array_flip(array_flip($arr))); //返回数组但不包含键名,处理后键名重置成索引数组. (索引数组去重 )
array_keys(数组,[指定键值],[true|true]); 函数返回包含数组中所有键名的一个新数组.

6-27 索引数组排序
//升序,降序.
sort() //索引数组情况下: 升序排列 ,索引也重置,直接改变了元素组, 如果赋值返回的值是布尔值,排序是否成功,true,false.
rsort() //降序排序 ,其他情况同上.

6-28 关联数组排序
1. 键名进行排序 ,升序   ksort();   
2. 键名降序排列  krsort();
3. 键值升序 asort()
4. 键值降序 arsort();

6-29 数组随机排序
shuffle() ;// 直接改变原数组, 会重置键名,排序成功则返回true.否则返回false.
$arr1 = ['a'=>1,'b'=>12,'c'=>11];
    function array_rs($arr){
        $a = $arr;  // 复制原数组
        shuffle($arr);  //按键值对数组进行随机排序
        $k = []; 
        foreach($arr as $item){
            $b = array_keys($a,$item); //获取数组中对应的键名
            $k = array_merge($k,$b); //合并数组
        };
        // print_r($k);
        // print_r($b);

       return array_combine($k,$arr); //合并键值和键名
    }
    $arrs = array_rs($arr1);
    print_r($arrs);

6-30 返回数组交集  //两个集合共有的部分
array_instersect($arr1,$arr2); //键值: 返回两个数组的交集数据. 第一个是被比较的数组,返回的结果是被比较结果中和别的对比的值.
索引和关系数组都可.
array_instersect_key()   //比较键名
array_instersect_assoc()   //既比较键名又比较键值 

6-31 返回数组的差集  //例如两个数组中不相同的元素
array_diff(); //比较键值
array_diff_key(); //比较键名
array_diff_assoc();        //比较键名和键值都不一样。

6-32  返回数组并集 两个合并,并且把相同的只保留一个
array_merge();                 //按照键名返回并集
array_file();                       // 键值和键名反转
$m = array_merge($arr1,$arr2); 
array_file(array_file($m); );    //按照键值返回并集 ,有重复的后面覆盖前面
array_unique($m);  //前面覆盖后面 

6-33 自定义并集函数
function union($arr1,$arr2,$x=true){
        $m = array_merge($arr1,$arr2);
        if($x==true){
           return array_flip(array_flip($m));
        }else{
            return array_unique($m); //前面覆盖后面
        }
    }
    print_r(union($arr1,$arr2,false));

6-34 自定义删除函数
unset($arr[1]); // 按照键名删除元素。 改变原数组。

6-35  补充两个常用函数
1.统计数组中所有值出现的次数    array_count_values($arr);
2.返回数组中某个单以列的值   array_column($arr,键名,键名);

7-1 类和对象初识
类:具有相同属性和方法的集合,需要实例化才能变成对象
类更像是一种规范,对象就是按照这种规范生产出来的具体产品
类名字母下划线开头,一般首字母大写
//创建一个类
class Ds{
        public $pinpai = "康佳";
        function kdy(){
            echo '看电影';
        }
        function tyy(){
            echo '听音乐';
        }
    };
    //实例化类 ,一个类可以实例化多个。类中的控制语句不能加分号
    $tv = new Ds();
    var_dump($tv);

7-2 对象运算符
使用类中的属性或方法需要用到对象运算符。->
//实例化类 ,一个类可以实例化多个。类中的控制语句不能加分号
    $tv = new Ds();
    echo $tv->pinpai;  //获取品牌属性
    $tv->kdy();   //访问方法
    $tv->kdy(110);  //方法传入参数

7-3 $this的用法
不管实例化的对象名称是什么,$this 只指向当前对象
$this ,主要读取类里面的属性和方法  , // 例如实例化前调用  $xz_tv->name="校长";   在方法中输出 $this->name

7-4 构造函数
__construct();  //每次创建对象先调用构造函数 ,实例化以后就调用构造函数,构造函数可以接收参数,能够在创建对象时赋值给对象属性。
function __construct(){
     echo "打开了一台电视";
}
对象的产生过程:
1.在内存中开辟一块用来保存对象的空间
2.执行构造函数
3.将对象的引用返回给变量
function __construct($n,$tv){
            $this->name=$n;
            echo $this->kdy($tv);
        }

7-5 析构函数
在对象销毁时调用析构函数
有两种情况: 1.php脚本执行完成,php会自动销毁对象。2.手动销毁函数unset(); //比较少用
__destrucr();        //经常用来进行资源释放工作。

7-6 面向对象继承特征
//面向对象三大基本特征,封装,继承,多态。
//继承:子类继承并拥有父类(基类)的属性和方法。 一个父类可以有多个子类
//父类
    class Fuqing{
        public $mgj ="木工具";
        function zmc(){
            echo "会做窗";
        }
        function zyg(){
            echo "会做衣柜";
        }
    }
    //子类
    class Erzi extends Fuqing{

    }
    //孙子

    class Sunzi extends Erzi{

    }

    $rz = new Erzi();
    //儿子继承了老子的属性和放大
    echo $rz->mgj;
    $rz->zyg();
    $sz=new Sunzi();
    $sz->zmc();

7-7 面向对象多态特征 
多个子类继承父类,对父类方法进行重写,实现多种状态 (现有继承才有多态)
可以重写父类方法,不会影响父类。 //查看父类 parent::zmc();
//子类
    class Erzi extends Fuqing{
        function zmc(){
            parent::zmc();
            echo "<br/>";
            echo "会做铝合金窗";
        }
    }

7-8 面向对象封装特征1 
成员属性和方法封装到类中,隐藏属性和方法,隐藏方法实现的细节。
使用关键字public,protected,private限定成员的访问权限,对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误使用。
要尽可能的对成员属性和方法进行封装,只开放少量的属性和方法
1.public : 公有的类型,对所有用户开放,所有用户都可以直接进行调用
2.protected: 受保护类型,本类,子类可以调用,外部对象不能调用
3.private:私有类型,本类可以调用,子类和外部对象不能调用

7-9 面向对象封装特征2
//控制私有属性的使用
class Ds{
        public $pinpai= "华为";
        public $sum;
        function __construct(){
            $this->sum = 50;
        }
        private function yljia($yl){
            $this->sum=$this->sum+$yl;
            echo "音量加${yl},总量是:{$this->sum}";
        }
        private function yljian($yl){
            $this->sum=$this->sum-$yl;
            echo "音量减${yl},总量是:{$this->sum}";
        }

        public function yaokong($x,$n){
            switch($x){
                case 'jia':
                    $this->yljia($n);
                    break;
                case 'jian':
                    $this->yljian($n);
                    break;    
            }
        }
    }
    $sy = new Ds();
    $sy->yaokong('jian','8');

7-10 final关键字的用法  //不可改变 
父类中的方法如果用final关键字,子类就不可以覆盖这个方法。
如果一个类用了final关键字,那么他不能够被继承。但是可以执行。
属性不能被定义final , 只有方法和类可以

7-11 const 定义常量
define('id',123) //定义常量属性
const id = 123;    //在类中定义常量 属于当前类,外面使用不了。不能在条件语句中定义常量,const定义常量没有 $符号

7-12 self和parent用法
$this-> //表示当前对象
self::dd(); //self::表示当前类中找到方法。在父类时使用。
parant::dd() //parent:: 表示父类 ,从子类的父类中找方法
双冒号叫做范围解析符。用来对类属性和方法设定范围

7-13 静态属性
方法内的变量运行结束之后会还原,为了在函数运行后不删除变量。 使用static静态属性 ,例如 static $x = 1;
当一个变量用static定义,这个对象只属于该类本省使用self:: 调用;

7-14 静态方法
类方法既可以使用静态调用也可以使类例调用
class A{
         static function aa(){
            echo "我是一个方法";
        }
    }
    A::aa();  // 没有实例化对象,直接调用类中的静态方法
 // 也可以  $x = new A();
 // $x->aa();

7-15 抽象方法和抽象类   // 抽象是一种规范,不能被实例化
abstract 
例如子类继承一个父类必须要重写某个方法时。在父类方法之前加一个关键字定义一个抽象方法,子类必须重写这个方法。
如果父类中有一个方法被声明是抽象方法,这个类就是抽象类。//为了定义一种规范,子类去继承并重写
abstract function aa();

7-16 接口类  //不同的设备实现方法      
implements  //子类
接口类就是一个类的领导者,指明方向,子类必须完成它指定方法
interface  // 父类
//接口类 ,只有方法没有属性,只能是公有方法,不能是私有的 ,接口中的每一个方法都要实现。
    interface Chazuo{
        function cha();
        function ba();
    }

    class Dianshi implements Chazuo{
        function cha(){
            echo "播放电视";
        }
        function ba(){
            echo "关闭电视";
        }
    }
    $tv = new Dianshi();
    $tv->cha();

7-17 数据库操作类1
知道数据库的一些信息准备好,新建一个数据库:
1.数据库类型:mysql
2.数据库地址: localhost /127.0.0.0
3.数据库端口:3306 / 等...
4.数据库名:zwx
5.数据库的登录名:root
6.数据库密码:root 

7-18 数据库操作类2
数据库链接方式有3种,mysql,mysqli,PDO
现在最流行PDO方式。 
创建PDO基类实例链接数据库
$pdo = new PDO('数据库类型:host=数据库地址;dname=数据库名',数据库登录名,数据库密码);
//设置字符集
$pdo->exec('set names unf8');
//返回结果集对象
//查询数据
$stmt = $pdo->query("select * from zxw__user");

7-19 数据库操作类3
$stmt->setFetchMode(PDO::FETCH_ASSOC);//查询模式(按照关联数组形式返回)
$stmt->setFetchMode(PDO::FETCH_NUM);//查询模式(按照索引数组形式返回)
//返回条数 ,如果不设置显示索引值的方式和关联两种方式返回
$rows = $stmt->fetch();   //返回1条
$row = $stmt->fetchAll(); // 返回多条
echo "用户名".$row['username']."的密码是:".$row['password'];

7-20 数据库操作类4
分为3个文件
1.放数据库配置
2.创建数据库操作类
3. 实例化数据库操作
connent.php
$dbms='mysql';
$host='localhost';
$dbName='zxw';
$sql='select * from zxw__user';
$info = array(
    'type'=>'mysql',
    'host'=>'localhost:3306',
    'dbname'=>'zxw',
    'user'=>'root',
    'pass='=>'root'
)
ceshi.php
require('connent.php'); //引入数据库配置文件
require('mypdo.php'); //引入数据库操作文件
$pdo = new Mysqlpdo($info);  //实例化数据库的操作类

7-21数据库操作类5
//创建数据库操作类
mypdo.php
    class Mysqlpdo{
        private $pdo;
        //构造函数,创建实例化马上执行
        function __construct($info){
            $type =$info['type'];
            $host= $info->$host;
            $dbName=$info['dbname'];
            $user=$info['user'];
            $pass=$info['pass'];
            //创建pdo基类实例化pdo对象,创建链接
            $this->pdo = new PDO("$type:host=$host;dbname=$dbName",$user,$pass);
        }
    }

7-22 数据库操作类6
ceshi.php-------------
<?php
    require('connect.php'); //引入数据库配置文件
    require('mypdo.php'); //引入数据库操作文件
    $pdo = new Mysqlpdo($info);  //实例化数据库的操作类
    $row= $pdo->pdo_query("select * from zxw__user where username='张三'",false);
    echo "<pre>";
    print_r($row)
?>
maypdo.php-----------
<?php
    //创建数据库操作类
    class Mysqlpdo{
        private $pdo;
        //构造函数,创建实例化马上执行
        function __construct($info){
            $type =$info['type'];
            $host= $info['host'];
            $dbName=$info['dbname'];
            $user=$info['user'];
            $pass=$info['pass'];
            //创建pdo基类实例化pdo对象,创建链接
            $this->pdo = new PDO("$type:host=$host;dbname=$dbName",$user,$pass);
        }
        //查询数据
        function pdo_query($sql,$b=false){
            $stmt=$this->pdo->query($sql);
            print_r($sql);
            $stmt->setFetchMode(PDO::FETCH_ASSOC);
            if($b){
                $row = $stmt->fetch();
                return $row;
            }else{
                $rows = $stmt->fetchAll();
                return $rows;
            }
        }
        
    }
?>
connect.php------------------------
$dbms='mysql';
$host='localhost';
$dbName='zxw';
$sql='select * from zxw__user';

$info = array(
    'type'=>'mysql',
    'host'=>'localhost:3306',
    'dbname'=>'zxw',
    'user'=>'root',
    'pass'=>'root'

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值