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