面向对象

1.0 类名首字母要大写

class A{

   类成员;

}

2.0 类成员

类成员可以赋予初值。一般成员都需要关键字的说明,会有 public、private和static属性,但是如果没有特别的说明要用 var 关键字 说明,一旦有其他的关键字修饰时可以替换var关键字。

3.0 类的实例化

$a = newclasname();

4.0  $this指针

在对象内部 $this 指针指的是对象。可以用$this指向内部的成员

classPerson{

   var$name;

   var$num;

   var$sex;

  

function__construct(){

   $this->name ="小红";

   $this->num ="2011";

   $this->sex ='man';

}

}

用$this->num;不用$this->$num;

5.0 构造函数和析构函数

1.在构造函数中php5.0版本以前使用与类名相同的名称。Php5.0之后的版本就用__construct名称。省去在改变类名的时候,同时改变构造函数名称。

Function_construct(参数列表){

}

为了向下兼容,如果没有_construct名称,默认寻找与类名相同的构造函数。

2. __destruct(),析构函数不加任何的参数。析构函数是在php5.0以后的版本中添加的,析构函数是在对象被销毁时自动调用的。

在php中有一种垃圾回收机制。当对象不能被访问时就会自动的启动垃圾回收机制。回收对象在堆栈中的空间。析构函数就是在回收对象之前调用的。

6.0  php面向对象的讨论

一般来说,面向对象中应该要有封装性,就是不允许在类外直接可以调用成员。Public的成员是可以的。但是private的成员是不行的。所以会在类中为成员都设置一个赋值和读取的函数。Php中为了减少繁琐性就设置了__set()函数。可以直接在外部为私有成员赋值。

<?php

Class Wo {

   private $name;

   public $num;

   public $sex;

   function __construct(){

       $this->name = "wp";

       $this->sex = "wo";

       $this->num = "we";            

    }

   

      function __set($stringname,$value){

       $this->$stringname = $value;

   }   

   function  put(){

       echo "名字".$this->name."座号为".$this->num."性别为".$this->sex;

       

    }

   

    }

    $person = new Wo;

   $person->name = "xiao"; //为私有成员赋值

   

   $person->put();

   

?>

Function __get();获取私有成员值

<?php

class Person{

    private $name;

       var $num;

       var $sex;

      

function__construct(){

       $this->name = "小红";

       $this->num = "2011";

       $this->sex = 'man';

}

 

function__get($propertyName){

       if($propertyName =='name')  return $this->$propertyName;

}

 

}

$xiao = newPerson;

echo$xiao->name;

?>

魔法函数__isset(){}用于判断是否变量是否存在

Function__isset(){

Return isset(变量名称)

}

魔法函数__unset(){}用于删除私有成员。利用unset()函数

Function__unset($varname){

 

Unset($varname)

}

Unset($varname)


7.0 子类调用父类中被重载的方法 parent::

一般来说重载父类函数的时候,父类的函数功能就被子类的函数重写。而类似于__construct()这样的构造函数,如果子类中需要对子类中的成员进行赋值的话。会把父类中的构造函数进行重写,从而父类的成员就不会被付初值。继而用parent::调用父类的成员到子类的成员中。这样让子类对父类中的成员也可以一并赋初值。

<?php

class Person{

   var $nam;

   var $sex;

   function __construct(){

       $this->nam = "小红";

       $this->sex = "男";

    }

   function say(){

   echo $this->nam.$this->sex;

    }

}

class Student extends Person{

   var $num;

   function __construct(){

        $this->num = 2011;

        parent::__construct();   

    }

   function say(){

       parent::say();

       echo $this->num;

   }  

    }

 

 $person = new Person;

 $person->say();

 echo"<br>";

 $student = new Student;

 $student->say();

?>

实验结果:
小红男

小红男2011
 

8.0使用final关键字标识的类不会被子类所继承。被标识的成员方法不会被重写。


使用static静态成员属性标识的成员方法和成员。是不需要实例化对象调用的。因为它属于类不属于对象。所以不能用$this指针来引用他。需要用self关键字;

<?php

 

class P{

   static $count;

   function __construct(){

       self::$count++;

       

    }

   function getcount(){

       echo self::$count;

    }

   

    }

   p::$count = 0;

   $wo = new P();

   $wo1 = new P();

   $wo2 = new P();

   $wo3 = new P();

   echo p::$count;

   echo "<br>";

   echo $wo3->getcount();

?>


9.0 单态设计模式

保证在面向对象的过程中。一个类只有一个实例化对象,在建立目录和数据库连接可能都会用到这个函数。

Const 标识(定义为常量)和static的用法大致一致,功能不同。但是变量标识不同

Const var=”常量”;在类的内部用self::进行调用。

Instanceof关键字用于判断是否为类的实例化对象


10.0 克隆对象clone

有时需要对象做实验,避免重新new实例化一个对象,可以克隆一个对象。克隆对象后的对象也会拥有同母体一样的方法和成员。

$person = new Person();

$person2 = clone $person ;

此时的$person 和 $person1 是相同的。但是又不是同一个对象。如果需要对克隆的对象重新初始化。需要在母体中申明__clone()魔法方法。无需定义__clone()的参数。用$this(子) 和$that(母体)指针来为__clone()做赋值操作;

11.0 类中的通用方法__toString()

通常是快速获取对象字符串表示的方法。已知 $per = new Person(); 而$per为一个指针;指向内存地址。所以echo $per 是错误的。但是__toString()能获取对象字符串表示。所以魔术方法__toString(){

Return something;

}

<?php

 

class P{

   var  $count;

   function __construct(){

       $this->count = 'w';

    }

   function getcount(){

       echo  $this->count;

    }

   function __toString(){

       return  $this->count;

    }

}

   $wo = new P;

   echo $wo;

?>


12.0 __call()方法的应用

如果调用类中不存在的函数、或者不存在的参数的话。程序会出现错误。那么__call()方法就会为这种情况作出处理好让程序继续往下执行。同时返回不存在的函数及其参数列表。

Function __call()有俩个固定参数,一个用于调用的函数名,一个用于被调用函数的参数列表。

<?php

class P{

   var $name;

   function __construct(){

       $this->name= 'wo';

    }

   function __call($functionname,$arry){

       echo '你输入的'.$functionname.'不存在';

       echo '<br>他的参数为';

       print_r($arry);

   } 

   }

$p1 = new P();

$p1->name(1,2.3);

?>

注意:数组的array(

        “key” =>”value”,

        “key” =>”value”,

“key” =>”value”,

)先是键然后是值。Array是个系统函数。

Strtolower()变为小写;

基于__call()的连贯操作:就是在用到__call(){}的位置都会返回调用该方法的对象:return $this;

<?php

class P{

   private $name = array(

       "where"=>"",

       "select"=>"",

       "from"=>"",

   );

   function __call($functionname,$arry){

        $functionname = strtolower($functionname);

      if(array_key_exists($functionname,$this->name)){

           $this->name[$functionname]= $arry[0];

      }else{

          echo '不存在此函数';

      }

      return $this;

    }

   function say(){

       echo$this->name['select'].$this->name['from'].$this->name['where'];

    }

   }

$p1 = new P();

//连贯操作

$p1->select("select * from")

  ->from("table")

  ->where("where name='wo'")

  ->say();

?>


13.0  自动加载类__autoload(){ }

在设计面向对象程序时,通常会为一个类设计一个php源文件。如果需要调用多个类的话需要加载多个文件。Include就会有很长的文件。会比较繁琐。和容易出错。Php提供自动加载类。在文件中参数定义为类名.所以在定义文件时要统一:例如Person.Class.php

<?php

function __autoload($classname){

   include("strtolower($classname).class.php");

    }

   $p = new Person();

   $p1 = new Student();

?>


14.0 对象的串行化:serialize();将对象串行化保存起来待下次用到用unserialize();

$preson = new Person();

$string = serialize( $preson );

File_put_contents(‘file_.txt’,$string);

 

获取:

$stringFile=_get_contents(‘file_.txt’);

$person = unserialize($stringFlie);

__Sleep() 和__wakeup();是用在与串行化/反串行化一起用的__sleep()是在串行化时默认的保存的成员。__wakeup()是反串行化时输出的一些操作和成员


15.0 抽象类和抽象方法abstract

抽象类无法实例化,用抽象类的好处在于规定了一个模板。子类一定要实现抽象类中的抽象方法。否则子类也为抽象类无法实现实例化

Abstract class Pres{

 

Abstract function  say();

}

16.0 Interface接口

一般来说类单继承设计。即一个类只有一个父类。但是可以拥有多个接口。

接口和抽象类有点类似。他所定义的方法全部默认为抽象类

Interface P{

Function say();

}

Say()为抽象类

 

17.0 多态性

在php中多态性指的就是方法的重写,可以用interface来表达的话

<?php

interface Usb{

   function run();

   } 

class Myphone implements  Usb{

       function run(){

           echo '手机的接口';

       }

    }

class Myu implements Usb{

   function run(){

       echo 'u盘的接口';

    }

}        

class P{

   function runfuction($interface){

       $interface->run(); 

   }  

}

$p1 = new P();

$p1->runfuction(new Myphone());

$p1 ->runfuction(new Myu);

?>


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值