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