PHP 面向对象

面向过程

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

定义类:

class Ren
{
    public $Name;    //成员变量
    protected $age; 
    private $height;
    var $sex;       //一般不要给成员变量赋值
    function Run()  //成员函数(方法)
    {
        echo "这个人正在奔跑!";
    }
    function Say()
    {
        echo $this->Name."正在说话!";
    }
}

使用类

//1.实例化对象
$r = new Ren("男");
//2.给成员变量赋值(调用成员变量)
$r->Name = '张三'; //给对象的Name赋值
 $r->age;        //取值
//3.调用成员方法
$r->Say();    //执行成员方法

访问修饰符
1.如果要加访问修饰符,需要去掉var
2.三种:public公有的 protected受保护的 private私有的
3.如果不加访问修饰符,默认是public

1 public $Name; //     公有的
2 protected $age; //  受保护的
3 private $height; //  私有的
4 var $sex; // 

$this引用
$this代表该对象(哪个对象调用),不是代表该类

构造函数
1.写法特殊:__construct()
2.执行特殊:在造对象的时候最先执行
作用:对对象进行初始化操作

 1 class Ren
 2 {
 3     public $Name;
 4     protected $age; 
 5     private $height;
 6     var $sex; 
 7     
 8     function __construct($s) //构造函数
 9     {
10         $this->sex = $s;
11     }
12 }
13 $r = new Ren("男");
14 var_dump($r);

析构函数,对象销毁前执行

 1 class Ren
 2 {
 3     private $name;
 4     private $sex;
 5     private $age;
 6     public function Say()
 7     {
 8         echo "hello";
 9     }
10     function __destruct() //析构函数,对象销毁前执行
11     {
12         echo "该对象销毁了!";
13     }
14 }
15 
16 $r = new Ren("男");
17 $r->Say();

面向对象三大特性
封装
目的:让类更加安全,不让外界直接访问类里面的成员变量
做法:

1.把成员变量做成私有的
2.做一个方法来实现变量取值或赋值,在方法里面加限制条件

继承

多态

赋值:

1.普通方法

 1 class Ren
 2 {
 3     private $name;
 4     private $sex;
 5     private $age;
 6     function SetAge($a)   //给age赋值的函数
 7     {
 8         if($a>10 && $a<50)
 9         {
10             $this->age = $a;
11         }
12     }
13 }
14 
15 $r = new Ren();
16 $r->SetAge(40);

2.魔术方法

class Ren
{
    private $name;
    private $sex;
    private $age;
    function __set($name,$value) //对类里面的私有成员进行赋值的魔术方法
    {
        if($name == "age")
        {
            if($value>20 && $value<50)
            {
                $this->$name = $value;
            }
        }
        else
        {
            $this->$name = $value;   //赋值
        }
    }
$r = new Ren();
$r->age = 40;

取值:

1.普通方法

class Ren
{
    private $name;
    private $sex;
    private $age;
    function GetAge() //取age的值
    {
        return $this->age;  //返回一个age的值
    }    
$r = new Ren();
echo $r->age;

2.魔术方法

 1 class Ren
 2 {
 3     private $name;
 4     private $sex;
 5     private $age;
 6     function __get($name) //对类里面的私有成员进行取值的魔术方法
 7     {
 8         return $this->$name;
 9     }
10 }
11 $r = new Ren();
12 echo $r->sex;

使用类里面提供的魔术方法也可以实现对私有成员的操作
__set()特点:会自动执行,把赋值语句中的变量名作为第一个参数,把变量值作为第二个参数调用__set方法
__get()特点:会自动执行,把取值语句中的变量名作为参数调用__get方法

原文地址:https://www.cnblogs.com/zk0533/p/5441850.html