首页 > 代码库 > PHP面向对象三大特征

PHP面向对象三大特征

<?php
//PHP 面向对象三大特征 封装 继承 多态 <抽象>


//封装

/**
* @author bin
*
*/
/* class Person{
//encapsulate
private $name;
private $age;
//这个就好比我们Java中的get set 想spring注入的 通过通过set方法 通过构造函数 一样
public function __set($columnName,$value){
$this->columnName = $value;
}

public function __get($columnName){
if(isset($columnName)){
return $this->columnName;
}else{
return null;
}
}

//构造器赋值
public function __construct($age,$name){
$this->age = $age;
$this->name = $name;
}

public function updateName($name){
$this->name = $name;
}
public function deleteName(){
unset($this->name);
}
}

$person1 = new Person("1", "chenbin1");
var_dump($person1);
//想修改名字
//$person1->name = "chenbin2" 显然这是错误的
$person1->updateName("chenbin2");
var_dump($person1);
$person1->deleteName();
var_dump($person1);
//__set __get魔术方法
$person1->age = 300;
echo $person1->age;
//这就是封装 要对对象进行修改改变 只能通过对象自身的成员方法来操作。
*/
//继承
//父类
class Bwm730{
public $name = "宝马730";
public $commName = "宝马汽车";
public $contury = "German";
protected $maxPrice = "300W"; //宝马汽车最高价格是300W
private $price = ‘130W‘;//宝马730 的价格

public function __construct(){
echo "<br>我是父类的构造方法<br>";

}

public function getInfo(){
echo $this->name.‘||‘.$this->commName."|| 所属国家".$this->contury."||宝马汽车最高价格为".$this->maxPrice."||".$this->price;
}
public function parentMethod(){
echo "<br>我是父类的成员方法<br>";
}
}
//子类
class Bwm740 extends Bwm730{
public $name = "宝马740";
private $myPrice = "100w";
public function __construct(){
self::parentMethod();//这个可以调用父类的普通成员函数
//parent::getInfo();
Bwm730::__construct();//这个可以调用父类的魔术函数
parent::__construct();//这个可以调用父类的魔术函数

}
public function getInfo_1(){
echo $this->name.‘||‘.$this->commName."|| 所属国家".$this->contury."||宝马汽车最高价格为".$this->maxPrice."||".$this->myPrice;
}
//PHP 重载 和Java不同 Java 能够根据参数来区分 但是PHP的参数是无法判读是什么的,只是为了在调用方法的时候在栈空间开辟一个地址
//PHP5 实现重载的方法 是魔术方法__call

public function __call($method,$parameter){
if(count($parameter) == 1){
$this->getInfo_1();
echo "<br>只有一个参数调用 getInfo_1<br>";
}else{
$this->parentMethod();
echo "<br>参数有多,调用父类方法 parentMethod<br>";
}
}
//PHP 重写 重写肯定要有继承 有父子关系 方法名 参数个数(名称可以不一样) 必须一致 实际上重写是多态的体现形式
//所谓多态,多态就是一个东西,有多重存在形式,父类一个方法,子类可以有不同的实现方式。
// 方法覆盖的时候 访问修饰符 大于等于父类的方法修饰符范围
public function getInfo(){
echo "<br>重写父类getInfo方法<br>";
}
}

//$bwm730 = new Bwm730();
//$bwm730->getInfo();

$bwm740 = new Bwm740();
$bwm740->getInfo();
$bwm740->test(1,2,3);
//$bwm740->getInfo_1();//调用这个方法的时候 拿不到price的值,说明private 的成员属性是不能被子类拿到的 方法也是一样的
//结果宝马730||宝马汽车|| 所属国家German宝马740||宝马汽车|| 所属国家German

//继承就是 有时候我们会有很多相似的东西,不想多次写,那么我们写一个基类,也就是父类,我们所有扩展的子类只需要继承基类,
// 注意:关于父类 子类构造方法, new 一个子类的时候,不会调用父类的构造方法。
//就能拿到部分大家都需要的东西,这就是继承

 

 


?>