PHP面向对象(非常适用于刚接触PHP的朋友)

欢迎大家一起讨论关于PHP方面的问题!希望这些东西能对你有那么一点点帮助,是我的幸福! PHP的面向对象: =================================================== 对象是客观存在的一个实体。 类是对对象抽象的一个描述。 概念:对象(实体)、类、 类与对象的关系。 oop面向对象编程的特点:封装、继承、多态 类和对象的关系: 类的实例化结果就是一个对象(使用new关键字) 对对象的抽象描述就是一个类 一、如何定义一个类,和使用 ------------------------------------- 1.1 语法格式: [修饰符] class 类名 { 【成员属性】定义变量 【成员方法】定义函数 } [修饰符] class 类名 [extends 父类] [implements 接口1[,接口2...]]{ 【成员属性】定义变量 【成员方法】定义函数 } 1.2 其中成员属性格式: 修饰符 $变量名[=默认值]; 如:public $name="zhangsan"; 注意:成员属性不可以是带运算符的表达式、变量、方法或函数的调用。 如: public $var3 = 1+2; public $var4 = self::myStaticMethod(); public $var5 = $myVar; 正确定义方式: public $var6 = 100; //普通数值(4个标量:整数、浮点数、布尔、字串) public $var6 = myConstant; //常量 public $var7 = self::classConstant; //静态属性 public $var8 = array(true, false); //数组 常用属性的修饰符:public、protected、private、static、var 1.3 其中成员方法格式: [修饰符] function 方法名(参数..){ [方法体] [return 返回值] } 常用的修饰符:public、protected、private、static、abstract、final 1.4 对象: 他是通过new 类()来产生的对象。其中new称为实例化 也就是:类的实例化就会产生一个对象。 如: $p = new Person(); 1.5 $this 关键字: 表示自己,表示当前使用对象。 我们在类中调用自己的成员属性或函数都是使用 $this->调用。 注意:非静态方法中可以使用this关键字 二、构造函数和析构函数 ------------------------------------------ 2.1. 构造方法(构造函数): 当我们通过new关键字来创建一个对象时,第一个自动执行的方法称为构造方法。 方法名__construct(); 主要用于初始化对象。 (在php4.0时可使用与类名重名的方法作为构造方法) 2.2. 析构方法:当这个对象被销毁时最后自动调用的方法,称为析构方法。 __destruct(); 目的是释放资源(如关闭连接、文件,释放资源) 三、封装(访问控制) -------------------------------------------------------------------- 3.1 封装:就是将属性私有,并提供公有的setter放置与getter取值方法 public(公有) protected(受保护) private(私有) =========================================================== 在本类中 Y Y Y 在子类中 Y Y N 在类外边 Y N N 四、 重载 ---------------------------------------------------------------- 4.1 属性重载中的四个魔术方法:__set() __get() __isset() __unset() * __get():当我们直接输出一个对象中的非公有属性时会自动调用的方法, 并将属性名以第一个参数传进去。 __get($name){...} * __set(); 当我们直接设置一个对象中的非公有属性时会自动调用的方法, 并将属性名以第一个参数,值作为第二参数传进去。 __set($name,$value){...} __isset()当对未定义的变量调用isset() 或 empty()时,__isset() 会被调用。 //当isset判断一个对象的非公有属性是否存在时,自动调用此方法。 public function __isset($param){ return isset($this->$param); } __unset()当对未定义的变量调用unset()时,__unset() 会被调用。 //当unset销毁一个对象的非公有属性时,自动调用此方法。 public function __unset($param){ unset($this->$param); } 4.2 方法的重载: * mixed __call ( string $name , array $arguments ) mixed __callStatic ( string $name , array $arguments ) php5.3.0支持 当调用一个不可访问方法(如未定义,或者不可见)时,__call() 会被调用。 其中第一个参数表示方法名,第二参数表示调用时的参数列表(数组类型) 当在静态方法中调用一个不可访问方法(如未定义,或者不可见)时,__callStatic() 会被调用。 五、 继承 ---------------------------------------------------------------------------- 5.1. 继承:extends 假如B类继承A类,那么就继承了A中所有属性和方法(函数)。   其中A叫父类(基类)。 B叫子类(派生类) class B extends A{ .... } 在php中类只支持【单一继承】,就是一类只能继承一个父类。 parent关键字:若子类出现覆盖父类的方法,那么有时还想调用被覆盖掉了的方法, 我们就是用关键字【parent::父类方法】还有使用类名 class A{ public function __construct(){ //.... } } class B extends A{ public function __construct(){ parent::__construct();//注意要调用一下父类的构造方法 //.... } } 六、 final、static和const --------------------------------------------------------------- 6.1 final关键字:主要用于修饰类与成员方法(函数) 使用final关键字修饰类,表示这个类不可以有子类。(一般是没有必要有子类的,防止有子类的覆盖) 使用final关键字修饰的方法,不可以在子类中被覆盖(重写)。 目的:一是为了安全,二是没有必要 *6.2 static关键字:表示静态的意思: 用于修饰类的属性和方法 *static关键字修饰方法称为静态方法,可以不用new(实例化)就可以直接使用方法:如 类名::方法名 注意:静态方法在实例化后的对象也可以访问 //$对象名->静态方法名 static关键字修饰属性称为静态属性,可以不用new(实例化)就可以直接访问属性:如 类名::属性名 注意:静态属性在实例化后的对象不可以访问; //$对象名->静态属性名 注意:静态属性是共享的。也就是new很多对象也是共用一个属性 *在静态方法中不可以使用非静态的内容。就是不让使用$this 在类的方法中可以使用其他静态属性和静态方法,不过要使用self关键字: 如 【self::静态属性名】或【self::静态方法名】 (>PHP5.3)在一个类的方法中若没有出现$this的调用,默认此方法为静态方法。 *6.3. const关键字: 在类中修饰成员属性,将其定义成常量(不可修改的), 一般要求常量名都是大写的,没有“$”符 没有其他修饰符(public) 在其他方法中使用常量: 【self::常量名】 定义格式: const 成员常量名="值"; 使用:在类的方法中: echo self::成员常量名; 在类的外部: echo 类名::成员常量名; 6.4. 检测当前对象是否是属性指定的类 instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例: is_a — 如果对象属于该类或该类是此对象的父类则返回 TRUE 七、 类型约束 ---------------------------------------------------- 1. 类型约束可以使用的类型是:数组或对象。 若指定的一个类名,那么可传入本类及子类的对象进去。 可以使用的约束类型:(复合类型)数组array,类名、抽象类名、接口名 //如下面的类 class MyClass { /** * 测试函数 * 第一个参数必须为类OtherClass的一个对象 */ public function test(OtherClass $otherclass) { echo $otherclass->var; } /** * 另一个测试函数 * 第一个参数必须为数组 */ public function test_array(array $input_array) { print_r($input_array); } } 八、其他魔术方法: ----------------------------------------------------------------- 1. 对象复制clone 克隆一个对象,因为对象属于引用类型,普通的“=”号属于引用赋值, 所有需要clone来复制一份。 魔术方法:__clone() 当执行clone克隆时会自动调用的方法。 2. __toString()方法:魔术方法,当我们直接要输出一个对象时,如echo $a,print $a, 那么会自动调用的方法。 注意:__toString()方法必须返回一个字串类型的值。 3. *自动加载类函数__autoload(类名): 当new 实例化一个对象时,这个类若不存在,则自动调用此函数,并将类名存入参数 我可以使用这个实现类的自动加载。 九、 对象序列化(串行化)(webservice XML,json)(在对象持久化存储、和传输中使用) ---------------------------------------------------------------------------------------------- serialize() -- 串行化 unserialize() -- 反串行化 php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。 unserialize()函数能够重新把字符串变回php原来的值。 序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。 __sleep 和 __wakeup __sleep(): 是执行串行化时自动调用的方法,目的是实现资源类型的属性实关闭操作。 注意:sleep方法需要返回一个数组,其中数组中的值是串行化时要保留的属性名 __wakeup():是在执行反串行化时自动调用的方法,目的是实现资源属性的打开(sleep方法关闭的资源) public function __seep(){ return array('server', 'username', 'password', 'db'); //此串行化要保留四个属性 } 十、 抽象类: ------------------------------------------------------------------------------------- 当类中有一个方法,他没有方法体,也就是没有花括号,直接分号结束。 如 public abstract function fun(); 象这种方法我们叫抽象方法,必须使用关键字abstract定义, 包含这种方法的类必须是抽象类也要使用关键字abstract加以声明。 抽象类的特点: 不能实例化,也就new成对象 若想使用抽象类,就必须定义一个类去继承这个抽象类,并定义覆盖父类的抽象方法(实现抽象方法)。 其实抽象类对于子类(实现类),有一个约束的作用, 含有抽象方法的类肯定是抽象类,但是不是所有的抽象类都必须包含抽象方法。 十一、 接口: ------------------------------------------------------------------------------------------------- 假如一个抽象类中所有的方法都是抽象的,那么我们可以使用另外一种方式定义:接口 接口使用关键字interface来定义,接口中只能有常量与抽象方法。 格式: interface 接口名{ [常量定义] [抽象方法定义] //注意不要有abstract关键字 } 实现方式:class 类名 implements 接口名,接口名2{ 实现体。。 } 十二、多态 ------------------------------------------------------------------------------------------- *多态(使用方式):对于同一个方法,传入不同对象,实现了不同的效果,这个就是多态的意思, 需要使用的技术:继承或实现,方法的覆盖(重写)。 实例: 主板:mainboard PCI插槽(规范接口) 第三方生产 声卡: soundCard 网卡: networkCard 设计模式:单例、单态设计模式 http://localhost/.../index.php?m=类名&a=方法名&其他参数 http://localhost/.../user/add.html http://news.sohu.com/web/123456.html http://news.sohu.com//find?id=123456 十三、异常处理: -------------------------------------------------------------------------------- 在php5中有一种新的错误处理机制--异常处理:(采用面向对象方式的) 涉及的类:Exception异常类 结构: 使用: 1. throw new Exception("年龄不可以为负数"); //异常抛出 2. try{ //捕获异常 $s->age=30; $s->age=-40; 3. }catch(Exception $e){ //异常处理 echo $e->getmessage(); } php面向对象中的实用类: ================================================================== 1. Db.class.php 表数据信息操作类 2. page.class.php 分页类 方法:属性:URL地址、条件、总页数、总条数、页大小、当前 页 构造方法(参数:总条数、页大小、条件) 私有方法:计算最大页数、判断当前页数是否越界 输出分页信息方法:(输出给Model类中limit方法使用) 私有属性的getter方法(__GET()); 输出分页信息方法(输出HTML代码)(就是:【上一页】【下一页】。。。。) 3. images.class.php 图片处理类(等比缩放、图片水印、裁剪); 4. fileupload.class.php 文件上传类 5. 验证码输出
posted @ 2017-06-17 23:46  腐生  阅读(437)  评论(0编辑  收藏  举报