PHP 对象及其三大特性

//面向过程

//类和对象
//对象:任何东西都可以成为对象,类实例化出来的东西
//类:对所有同类的对象抽象出来的东西

//info:code,name,sex,nation,birthday
//对象:一条具体的信息:p001,张丹,女,汉,1990-12-04

//定义类
    class Ren
    {
        public static $class;
        private $Name; //成员变量
        private $age;
        private $height;
        var $sex;//一般不要给成员变量赋值
        const π=3.1425926;//将某些类里面常用的 定义为常量
        
        static function test()//静态方法
        {
            echo self::$class;            
            echo "静态方法";
        }
        function __construct($s)
        {
            $this->sex=    $s;
        }
    
        function Run()//成员函数(方法)
        {
            echo "这个人正在奔跑";    
        }
        function Say()
        {
            echo self::$class;
            //echo $Name."正在说话";//错误写法
            echo $this->Name."正在说话";//正确写法,$this表示该对象
        }
        function __destruct()//析构函数,对象销毁前执行
        {
            echo "该对象销毁了";
        }
        /*function SetAge($a)
        {
            if($a>10 && $a<50)
            {
            $this->age=$a;
            }
        }
        function GetAge($a) 
        {
            if($a>10 && $a<50)
            {
            $this->age=$a;
            }
        }*/
        
        function __set($name,$value) //对类里面的私有成员进行赋值的魔术方法
        {
            $this-> $name=$value;
            if($name=="age" && $value>20 && $value<50)
            {
            $this->age=$a;
            }
        
        }
        function __get($Name) //对类里面的私有成员进行取值的魔术方法
        {
            return $this->$Name;
        }
    }
//使用类
//1.实例化对象
    $r=new Ren("男");
//2.给成员变量赋值(调用成员变量)
    $r->Name='张良';//给对象的name赋值
    //var_dump($r);
//3.调用成员方法
    $r->Run();//执行成员方法
//访问修饰符
//1.如果要加访问修饰符,要去掉var
//2.三种:public公有的,protected受保护的,private私有的 
//3.如果不加访问修饰符,默认是共有的
    
//$this引用
    $r->Say();
//$this表示该对象(哪个对象调用)    ,不是代表该类
    
//构造函数
    //function__construct()
    //{
    //}
//1,写法特殊
//2.执行特殊,再造对象时自动执行
//作用:对对象做初始化操作

//面向对象三大特性 
//封装,让类更加安全
//做法:1.把成员变量变成私有的
//2.做一个方法来实现变量的取值和赋值,加一些限制条件
$r->SetAge(40); 
//取age值的方法
echo $r->GetAge();
//使用魔术方法
$r->name ="李思";//执行该语句会自动调用__set方法
//__set() 特点:会自动执行,把赋值语句中的变量名作为第一个参数,把变量值作为第二个参数调用__set方法
//__get() 特点:会自动执行,把取值语句中的变量名作为参数调用__get方法

//继承
//概念:如果一个类有子类,那么该子类会继承父类的一切东西(不包括私有成员)
//在定义子类的时候需要加一个关键字 extends
//特点:单继承,一个儿子只能有一个父亲,一个类只能一个父类
    //如果父类中有构造函数,子类在实例化的时候要按父类构造函数的标准来实例化
//子类对父类的方法的重写,在子类里写一个同样的方法
//final:用来修饰类,代表该类是一个最终类,该类无法被继承
class Test extends Ren
{
    
    public $birthday;
    function Run()
    {
        echo "running";
    }
    function Say() 
    {
        parent::Say();//调用父类的Say()方法,parent只能在子类中使用
        echo "saying";
    }
}

$t=new Test("女");
$t->__get();
$t->Say();
//静态成员
//普通成员是属于对象的,不是属于类的 (调用的时候是用对象调用)
//什么叫静态的:类静态成员是属于类的,不是属于每个对象的
//定义静态成员用static关键词修饰
//静态方法里面不能调用普通成员
//静态方法调用静态成员,要使用self关键词
//self表示该类 $this表示该对象
//普通方法里面可以调用静态成员
Ren::$class="0305";//访问静态成员
echo Ren::$class="0305";

//多态
//概念:当父类引用指向子类实例的时候,由于子类对父类函数进行了重置,导致我们在使用该引用去调用相应的方法表现出的不同
//条件:必须有继承
//2.子类必须对父类的方法进行重写 

class Rene
{
    public $name;
    public $sex;
    function Say()
    {
        echo "你好a ";
    }
    function Say($a)
    {
        echo $a."你好a ";
    }
    function Say($a,$b)
    {
        echo $a.$b."你好a ";
    }
    function __tostring()//输出类的描述
    {
        return "这个对象包括变量name和sex,一个say方法";
    }
    function __clone()//克隆对象时自动执行
    {
        $this->name="事发后";//this 指副本 (克隆出来的新对象)
    }
}
class China extends Rene
{
    function Say()
    {
        echo "你好";
    }
}

$q=new Rene();
$q1=new China();

//函数重载 
//2.函数里面参数的个数不同
//3.如果个数相同,类型不同
$r=new Rene();
$r->Say();

//PHP是弱类型语言,所以没有重载
//PHP有可变参数的函数

//__tostring()

//对象的克隆 
$r=new Rene();
$r->name="福建";

$r1=clone $r;//克隆对象
echo $r->name;
echo $r1->name;

var_dump($r1);





?>
  

 

posted @ 2016-05-10 11:01  翟喵儿  阅读(414)  评论(0编辑  收藏  举报