第七章(11)面向对象详解_对象的串行化和反串行化
串行化就是把对象转化成二进制的字符串 (要串行化的对象名称).
反串行化就是把二进制化字化为对象 unserilize(要反串行化的对象名称).
符串转串行化标准:
$r1=new Ren("张三",20,"男");
$str=($r1<要串行化的对象>);
$file=fopen("tmp.txt"<串行化保存到的文件地址>,"w"<写>);
fwrite($file,$str);
fclose($file);
反串行化标准:
include"ren.php"<将串行化对象的php移入反串行化的php中>;
$file=fopen("tmp.txt"<要反串行化的文件地址>,"r"<读>);
$str=fread($file,filesize("tmp.txt"<读的长度,填文件地址就是文件有好长就读好长>));
fclose($file);
$r=unserilize($str);
$r->shuohua();
在什么情况下将对象串行化:
1.对象在网络中传输的时候.
2.将对象存入文件或数据库的时候.
__sleep(){$arr=array(要串行化的属性);return $arr;}串行化部分属性时自动调用的方法.
__wakeup()反串行化时自动调用的方法<可以将串行化的属性在反串行化时初始值>.
第七章(12)面向对象详解_抽象方法和抽象类
抽象方法:在类里面没有方法体的方法就是抽象方法.
abstract<抽象方法关键字> function 方法名();.
抽象类:抽象类不能实例化对象的,此类就是抽象类,抽象类不能实例化 对象,就要在此类前面加 abstract来修饰.
抽象类的用途:就相当于一个规范,如果要抽象类里面的原有的功能实现就必须以抽象类作为父类做一个子类,然后覆盖完整抽象类里面的抽象方法,才能使抽象类里面的功能一一实现.
第七章(13)面向对象详解_接口的声明与使用
interface 接口名称{所有的属性都必须是常量,所有的方法都必须是抽象的,所有的成员都必须是公有的}
接口的作用:是一个规范.
实现接口时使用implements<继承接口的关键字>.
可以使用抽象类去实现一个接口的部分方法.
使用类去实现接口中的全部方法.
接口的使用实例:
interface<声明接口的关键字> Ren1
{
const XINGMING="张三";
function shuohua1();
function shuohua2();
}
interface Ren2 extends<接口继承接口可以使用继承关键字> Ren1
{
function shuohua3();
function shuohua4();
}
interface Ren3{function shuohua5();}
interface Ren4{function shuohua6();}
class Ren5{function shuohua7(){echo "7777<br>";}}
class Ren extends Ren5 implemenrs<继承接口的关键字,必须先继承类再继承接口,可以同时继承多个接口> Ren2,Ren3,Ren4
{
function shuohua1(){echo "1111<br>";}
function shuohua2(){echo "2222<br>";}
function shuohua3(){echo "3333<br>";}
function shuohua4(){echo "4444<br>";}
function shuohua5(){echo "5555<br>";}
function shuohua6(){echo "6666<br>";}
<完整所有继承过来的抽象方法>
}
$r=new Ren(); echo Ren::XINGMING."<br>";
$r->shuohua1(); $r->shuohua2(); $r->shuohua3(); $r->shuohua4(); $r->shuohua5(); $r->shuohua6(); $r->shuohua7();
实例输出结果:
张三 1111 2222 3333 4444 5555 6666 7777
第七章(10)面向对象详解_常用的自动调用的方法
__tostring() 是直接输入对象时自动调用的方法.
<如果想在直接输入对象时得到什么结果,可以将想要得到结果的代码写在__tostrimg()里面>
__clone() 对新克隆出来的副本进行属性初始化时自动调用的方法.<如果一个对象想做成两个对象,而不是一个对象有两个名称时,可以使用__clone()的方法,此时在__clone()里面的$this代表副本本身,$that代表原本本身,在书写时不能直接写成 原本对象名称=副本对象名称,这仅代表一个对象有两个名称,应写成 原本对象名称=clone副本对象名称,这样才是真正两个同样的对象,副本的__clone()里面还可以加上其它的输出>
__call(里面要有两个参数,调用不存在的方法名称传给第一个参数,不存在的列表传给第二个参数) 调用不存在对象方法时自动调用的方法.
__autoload(调用其它php中类的名称传给此参数) 调用其它php里面的类到本php中产生对象时自动调用的方法.<__autoload()并不是写在本对象内部的,而是在对象外部使用的方法>
第七章(4)面向对象详解_构造方法与析构方法
特殊的引用$this的使用
实例说明:
class Ren
{
var $xingming;
var $nianling;
var $xingbie;
function shuohua()
{echo "我的姓名是:".$this->xingming.",我的年龄是:".$this->nianling.",我的性别是:".$this->xingbie."<br>";}
function zoulu()
{echo "我在走路<br>";}
function chifan()
{echo "我在吃饭<br>";}
}
$r1=new Ren(); $r2=new Ren(); $r3=new Ren();
$r1->xingming="张三"; $r2->xingming="李四"; $r3->xingming="王五";
$r1->nianling=90; $r2->nianling=23; $r3->nianling=41;
$r1->xingbie="男"; $r2->xingbie="女"; $r3->xingbie="男";
//人1.2.3各自说出自己的姓名.年龄.性别:
$r1->shuohua(); $r2->shuohua(); $r3->shuohua();
输出结果:
我的姓名是:张三,我的年龄是:90,我的性别是:男
我的姓名是:李四,我的年龄是:23,我的性别是:女
我的姓名是:王五,我的年龄是:41,我的性别是:男
$this的作用:代表对象的一个属性,相当于第一人称"我"的概念.
构造方法的特点:名称与类相同,对象一产生的时候自动调用,去初始化成员属性.
实例说明:(此实例是在php4里面的声明方法)
class Ren
{
var $xingming;
var $nianling;
var $xingbie;
function Ren($xingming,$nianling,$xingbie)
{
$this->xingming=$xingming;
$this->nianling=$nianling;
$this->xingbie=$xingbie;
}
function shuohua()
{echo "我的姓名是:".$this->xingming.",我的年龄是:".$this->nianling.",我的性别是:".$this->xingbie."<br>";}
function zoulu()
{echo "我在走路<br>";}
function chifan()
{echo "我在吃饭<br>";}
}
$r1=new Ren("张三",90,"男");
$r2=new Ren("李四",23,"女");
$r3=new Ren("王五",41,"男");
$r1->shuohua(); $r2->shuohua(); $r3->shuohua();
此例如上例输出结果完全相同.
在php5版本中的构造方法是function__construct(),不用写类名,作用相同.
析构方法__destruct()在程序结束前释放要释放的东西的方法.
实例说明:
class Ren
{
var $xingming;
var $nianling;
var $xingbie;
function __construct($xingming,$nianling,$xingbie)
{
$this->xingming=$xingming;
$this->nianling=$nianling;
$this->xingbie=$xingbie;
}
function shuohua()
{echo "我的姓名是:".$this->xingming.",我的年龄是:".$this->nianling.",我的性别是:".$this->xingbie."<br>";}
function zoulu()
{echo "我在走路<br>";}
function chifan()
{echo "我在吃饭<br>";}
function __destruct()
{echo $this->xingming."再见<br>";}
}
$r1=new Ren("张三",90,"男");
$r2=new Ren("李四",23,"女");
$r3=new Ren("王五",41,"男");
$r1->shuohua(); $r2->shuohua(); $r3->shuohua();
输出结果:
我的姓名是:张三,我的年龄是:90,我的性别是:男
我的姓名是:李四,我的年龄是:23,我的性别是:女
我的姓名是:王五,我的年龄是:41,我的性别是:男
王五再见 李四再见 张三再见
第七章(1)面向对象详解_面向对象的概念
什么是类:组成一个对象的过程称为类.
什么是对象:类组成的东西叫对象.
类与对象之间的关系:对象由类组合而来,先有类才有对象.
什么是成员属性:定义成员静态描述. 如:人的姓名,性别,身高,体重......
什么是成员方法:定义成员动态描述.能实现一些什么功能 如:人能吃饭,走路,开车,说话......
如何去抽象一个类:
class 类名 如:人类
{
成员属性:姓名,身高,体重...
成员方法:走路,说话,吃饭,开车...
}
例题:
class关键字 Person类名首字母要大写
{
成员属性
var关键字 $name;姓名
var $age;年龄
var $sex;性别...
成员方法
function关键字 say()
{echo "我在说话";}
function run()
{echo "我在走路";}
function eat()
{echo "我在吃饭";...}
}
产生实例化对象:
$P1=new关键字 Person类名;
$P2=new Person;
第七章(3)面向对象详解_对象实例化及使用
如何实例化对象
实例说明:
class Ren
{
var $xingming;
var $nianling;
var $xingbie;
var $shouji;
function shuohua()
{echo "我在说话<br>";}
function zoulu()
{echo "我在走路<br>";}
function chifan()
{echo "我在吃饭<br>";}
}
class shouji
{
var $pinpai;
var $yanse;
var $chiceng;
function dadianhua()
{}
function jiedianhua()
{}
function faxinxi($ren,$xinxi)
{$ren->shouji->shouxinxi($xinxi);}
function shouxinxi($xinxi)
{echo "接信息".$xinxi."<br>";}
}
//实例化.人:
$r1=new Ren(); $r2=new Ren(); $r3=new Ren();
//实例化.人的姓名:
$r1->xingming="张三"; $r2->xingming="李四"; $r3->xingming="王五";
//实例化.手机:
$s1=new shouji(); $s2=new shouji(); $s3=new shouji();
//实例化.人用手机:
$r1->shouji=$s1; $r2->shouji=$s2; $r3->shouji=$s3;
//实例化.人发信息:
$r1->shouji->faxinxi($r2,"hello");
输出:接信息 hello