PHP面向对象的三大特性

PHP面向对象的三大特性是指封装性,继承性,多态性。

一、封装性

封装性就是把一个类(对象)的属性和方法封装起来,外部只有被授权的方法或操作才可以访问。
php提供了三种访问控制符
public 表示全局的,本类内部,类外部,子类都可以访问 。
protected 表示受保护的,只有本类或子类可以访问 。
private 表示私有的,只有本类内部可以访问,外部和子类都不可以访问 。

<?php  
class play
{  
     public $public;  
     private $private;  
     protected $protected;  
     public  function __construct(){  
     $this->public    = 'public     <br>';  
     $this->private   = 'private    <br>';  
     $this->protected = 'protected  <br>';  
     }          
     public function public_function() {  
     echo "you request public function<br>";  
     echo $this->public;  
     echo $this->private;        //private属性,内部可以调用  
     echo $this->protected;      //protected属性,内部可以调用  
     $this->private_function();      //private方法,内部可以调用  
     $this->protected_function();      //protected方法,内部可以调用  
     }  
     protected  function protected_function(){  
     echo "you request protected function<br>";  
     }  
     private function private_function(){  
     echo "you request private function<br>";  
     }  
}   
    $test = new play();  
    echo $test->public;  
    echo $test->private;    //Fatal error: Cannot access private property test::$private  
    echo $test->protected;  //Fatal error: Cannot access protected property test::$protected  
    $test->public_function();  
    $test->protected_function(); //Fatal error: Call to protected method test::protected_function() from context  
    $test->private_function();  //Fatal error: Call to private method test::private_function() from context  

?>
从上面的例子中,我们可以看出,
public:    可以class内部调用,可以实例化调用。
private:   可以class内部调用,实例化调用报错。
protected:  可以class内部调用,实例化调用报错。

二、继承性

面向对象的继承性是指子类可以继承父类的属性和方法,并且子类可以自定义属性和方法。

<?php
class play
{  
     public $public;  
     private $private;  
     protected $protected;  

     public  function __construct(){  
     $this->public    = 'public     <br>';  
     $this->private   = 'private    <br>';  
     $this->protected = 'protected  <br>';  
     }  

     public function public_function() {  
     echo "you request public function<br>";  
     echo $this->public;  
     }  
     protected  function protected_function(){  
     echo "you request protected function<br>";  
     echo $this->protected;  
     }  
     private function private_function(){  
     echo "you request private function<br>";  
     echo $this->private;  
     }  
    }  

    class play1 extends play{  

     public function __construct(){  
     parent::__construct();  
     }  
     public function act(){  
     echo $this->public;  
     echo $this->private;       //Notice: Undefined property: play1::$private  
     echo $this->protected;  
     $this->public_function();  
     $this->protected_function();  
     $this->private_function();    //Fatal error: Call to private method play::private_function() from context 'play1'  
     }  

     public  function pro_extends_function(){  
     echo "you request extends_protected function<br>";  
     }  
     public function pri_extends_function(){  
     echo "you request extends_private function<br>";  
     }  
}  
$play = new play1();  
$play -> act();
从上面的例子中,我们可以看出,
public:    play类中的public可以被继承。
private:   play类中的private不可以被继承。
protected:  play类中的protected可以被继承。

三、多态性

多态性是指同一个对象在不同的情形下(被实例化),表现出不同的形态。

class car
{
    public $name;
    public $color;
    public $price
    public function run()
    {
        echo "I am a car,I can run";
    }
}

class bus extends car
{
    //覆盖和重写
    public function run()
    {
        echo "I am a bus,I can run,too";
    }
}
$bus = new bus();
echo $bus->run();
//最后输出 I am a bus,I can run,too
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值